Microsoft рдореЛрд▓реНрд╕

Moles MS Research рдХрд╛ рдПрдХ рд╣рд▓реНрдХрд╛ рдЙрдкрдХрд░рдг рд╣реИ, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдЖрднрд╛рд╕реА рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдмреНрд╕ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕реАрд▓рдмрдВрдж рдХрдХреНрд╖рд╛рдПрдВ, рдЧреИрд░-рдЖрднрд╛рд╕реА рдФрд░ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ (!) рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдХреЗ рдЬреЛ рдмрд╛рдж рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдореЗрдВ рдлрд┐рд╕рд▓ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдзрд┐ рдХреЗ рдмрдЬрд╛рдп рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ! ред рдкрд╣рд▓реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдЯрдм рдХреЛ рд╕реНрдЯрдмреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдореЛрд▓реНрд╕ рд╣реИред рдореИрдВрдиреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА , рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдХреНрд░рдо рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред



рд╕реНрдЯрдмреНрд╕





рдЖрдЗрдП рдРрд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдореВрд▓реНрдп, рд╕рд╛рде рд╣реА рд╕рд╛рде рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдирд╡рд░реНрд╕рди, рдФрд░ рдЕрдиреНрдп рдкрд╛рдЧрд▓рдкрдирдкреВрд░реНрдг рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдФрд░ рдкреИрдЯрд░реНрди (рд╢рд╛рдпрдж рд╕рднреА рдЕрдиреНрдп рдареЛрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд, рдФрд░ рд╢рд╛рдпрдж рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ FIRST ) рдЬреИрд╕реЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдкрд░реАрдХреНрд╖рдг рдпрд╛ рдЕрдВрдХрд▓ рдмреЙрдм рдХреЗ рдкреНрд░рд╢рдВрд╕рдХ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрдЪреНрдЪ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдЦрд░рд╛рдм рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдХреЗ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдпрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдХреЗ рдирд┐рд░реНрднрд░рддрд╛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред





рддреЛ, рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ IFoo рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред



namespace PlayingWithMoles

{

// , -

public interface IFoo

{

string SomeMethod();

}

// - , IFoo

public class FooConsumer

{

// ""

public FooConsumer(IFoo foo)

{

this .foo = foo;

}

// , - IFoo

public void DoStuff()

{

var someResults = foo.SomeMethod();

Console .WriteLine( "Doing stuff. IFoo.SomeMethod results: {0}" , someResults);

}

private readonly IFoo foo;

}

}




* This source code was highlighted with Source Code Highlighter .








рдЕрдм, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдЙрдЬреНрдЬреНрд╡рд▓ рджрд┐рдорд╛рдЧреЛрдВ рдХреЛ рдХрдо рдЙрдЬреНрдЬреНрд╡рд▓ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рджреМрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдХреНрдпрд╛ рд╕рдорд╛рди FooConsumer рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рд╣реИ, рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЕрджреНрднреБрдд DoStuff рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде (рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд▓рдЧрднрдЧ рд╢реВрдиреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╕рдордЭрд╛) ред рдЗрд╕рд▓рд┐рдП, FooConsumer рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ IFoo рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдвреВрдВрдврдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдХрд┐ рдпрд╣ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ (рдпрд╛ рдЕрд╕рдВрднрд╡) рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдФрд░ рд╡рд░реНрдЧ, рдЬреЛ рддреАрд╕рд░реЗ рдФрд░ рдЗрддрдиреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╣рдорд╛рд░реЗ рднрд╛рдИ рдХреА рдРрд╕реА рдЪрд╛рд▓ рдирд╣реАрдВ рдЪрд▓ рд╕рдХрддреА рд╣реИ, рдФрд░ рдЕрдЧрд░ рд╣рдордиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рддреЛ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╣рд╛рде рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рддрд░реАрдХрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрд┐рд╕реА рднреА рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдорд┐рд▓рддрд╛ рд╣реИ:



[TestClass()]

public class FooConsumerTest

{

class FooTester : IFoo

{

public string SomeMethod()

{

return "Test string" ;

}

}

[TestMethod]

public void DoStuffTest()

{

IFoo foo = new FooTester();

FooConsumer target = new FooConsumer(foo);

target.DoStuff();

}

}




* This source code was highlighted with Source Code Highlighter .








рдЕрдм рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╡рд┐рдВрдбреЛ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: рд╕рд╛рдорд╛рди рдХрд░рдирд╛ред IFoo.SomeMethod рдкрд░рд┐рдгрд╛рдо: рд╣реИрд▓реЛ, рдХрд╕реНрдЯрдо рд╕реНрдЯрдм ред рд╣рд╛рдВ, рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдЖрдк рдФрд░ рдореИрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИрдВ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╣рдореЗрдВ рдЗрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдпрдж рд╣реА рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд╛рдо рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВред



рддреЛ, рдореЛрд▓реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реАред рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕реНрдЯрдмреНрд╕ рдмрдирд╛рдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ "рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рдореЛрд▓ рдЬреЛрдбрд╝реЗрдВ" рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ "MyAssemblyName.moles" рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрдиреЗрдХреНрдЯреЗрдб рдЕрд╕реЗрдВрдмрд▓реА рдХреА рд╕реВрдЪреА рдЕрд╕реЗрдВрдмрд▓реА MyAssemblyName.Moles рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧреА, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЙрддреНрдкрдиреНрди рд╕реНрдЯрдмреНрд╕ рд╣реЛрдВрдЧреЗред рдпрд╣ рдЙрдкрдХрд░рдг рддрдм рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рдлрд▓ рдмрд┐рд▓реНрдб рдмрд┐рд▓реНрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЯреНрд░реИрдХ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдЯрдмреНрд╕ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред MyAssemblyName.moles рдлрд╝рд╛рдЗрд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд░рд▓ xml рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬреЛ рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдирд╛рдо рд╕реЗрдЯ рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдмреНрд╕ рдЙрддреНрдкрдиреНрди рд╣реЛрдВрдЧреЗ, рд╕рд╛рде рд╣реА рдЙрдирдХреА рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдЯрдмреНрд╕, рд╕реНрдЯрдмреНрд╕ рдпрд╛ рд╕реНрдЯрдмреНрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореЛрд▓реНрд╕) рдФрд░ рдЕрдзрд┐рдХ)ред





рдиреЛрдЯ

рд╕рдВрд╕реНрдХрд░рдг 0.94 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рдореЛрд▓реНрд╕ рдлрд╝рд╛рдЗрд▓ рдпреЛрдЬрдирд╛ рдмрджрд▓ рдЧрдИ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рд╕реНрдЯрдмреНрд╕ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдВрдХрд▓рди рдХреЛ рд░рджреНрдж рдХрд░ рд╕рдХрддреЗ рдереЗ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХрд┐рд╕реА рдПрдХ рднрд╛рдЧ рдореЗрдВ рд╕рдВрдХрд▓рди = рдЧрд▓рдд рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рдереЗ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдпрд╣ рддрдереНрдп рд╕рд╛рдордиреЗ рдЖрдпрд╛ рдерд╛ рдХрд┐ рд╕реНрдЯрдмреНрд╕ рдХреЗ рд╕рд╛рде рдЕрд╕реЗрдВрдмрд▓реА рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдИ рдереА, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╡рд░реНрддрдорд╛рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реАрдзреЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред 0.94 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЕрднреА рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЕрдлрд╡рд╛рд╣ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рдореНрди рд╕реНрдерд╛рди рдкрд░ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ: MyTestProject \ obj \ Debug \ Moles \ sl \ mgslред



рдЖрдЗрдП рдЗрд╕ рдЯреВрд▓ рджреНрд╡рд╛рд░рд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рдХреЛрдб рдХреЗ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рджреЗрдЦреЗрдВ:



namespace PlayingWithMoles.Moles

{

public class SIFoo

: Microsoft.Moles.Framework.Stubs.StubBase

, IFoo

{

string IFoo.SomeMethod()

{

var sh = this .SomeMethod;

if (sh != null )

return sh.Invoke();

else

{

// Behavior-,

}

}

// Sets the stub of IFoo.SomeMethod

public Func< string > SomeMethod;

}

}




* This source code was highlighted with Source Code Highlighter .








рддреЛ, рдЙрддреНрдкрдиреНрди рд╡рд░реНрдЧ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореВрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкреНрд░рдХрд╛рд░ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░реА рдкрджреНрдзрддрд┐ рдХрд┐рд╕реА рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рд░рд┐рдЯрд░реНрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ , рд╕реНрдЯрдм рдореЗрдВ рдлрдВрдХ <string> (рдпрд╛рдиреА, рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЛрдИ рднреА рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, SomeMethod рдкрджреНрдзрддрд┐ рдореЗрдВ, рдЗрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдмрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рдпрд╣ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЕрд╢рдХреНрдд рд╣реИ , рддреЛ рдПрдХ StubNotImplementedException рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдбрд╛рд▓реА рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реНрдЯрдм рдХреНрд▓рд╛рд╕ рдХрд╛ рдирд╛рдо рд╣реИ: S InterfaceOrClassName, рдФрд░ рдпрд╣ рдУрд░рд┐рдЬрд┐рдирд▓ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╣реИ ред рдореЛрд▓реНрд╕ рдиреЗрдорд╕реНрдкреЗрд╕ ред



рдЕрдм рдЕрдкрдиреЗ рдореВрд▓ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд╕реНрдЯрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

[TestMethod]

public void DoStuffTestWithStubs()

{

var fooStub = new PlayingWithMoles.Moles.SIFoo();

fooStub.SomeMethod = () => "Hello, Stub!" ;

var target = new FooConsumer(fooStub);

target.DoStuff();

}




* This source code was highlighted with Source Code Highlighter .








рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдкрд░, рд╣рдо, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рджреЗрдЦреЗрдВрдЧреЗ: рд╕рд╛рдорд╛рди рдХрд░рдирд╛ред IFoo.SomeMethod рдкрд░рд┐рдгрд╛рдо: рдирдорд╕реНрддреЗ, рдореЛрд▓реНрд╕ рд╕реНрдЯрдм!



рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реНрдЯрдмреНрд╕ рдХреЗрд╡рд▓ рдЗрдВрдЯрд░-рд╕реАрд▓ рдФрд░ рдЧреИрд░-рд╕реАрд▓рдмрдВрдж рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓ (рд╕реАрд▓ рдирд╣реАрдВ) рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рдХреЛрдИ рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╡рд╛рд░рд┐рд╕ рдХрдХреНрд╖рд╛рдПрдВ рдпрд╛ рдХрдХреНрд╖рд╛рдПрдВ рдЬреЛ рдЖрдкрдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВ, рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдХреЙрд▓ рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдХреЙрд▓ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рдВ, рдпрд╣ рдмрд╛рдд рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд ... рдореЛрд▓реНрд╕ред



рдореЛрд▓реНрд╕





рдореЛрд▓реНрд╕ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдЯрдм рд╣реИрдВ, рдЬреЛ рд╕реНрдЯрдмреНрд╕ рдХреЗ рд╕рдорд╛рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдЯреИрдЯрд┐рдХ рдпрд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдФрд░ рдЧреИрд░-рд╡рд░реНрдЪреБрдЕрд▓ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ FooConsumer рд╡рд░реНрдЧ IFoo рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ Foo рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ:



namespace PlayingWithMoles

{

// Foo,

// , IFoo

public class Foo

{

public string SomeMethod()

{

return "Hello, from non-virtual method." ;

}

}

// - , Foo

public class FooConsumer

{

// Foo

public FooConsumer(Foo foo)

{

this .foo = foo;

}

// , - Foo

public void DoStuff()

{

var someResults = foo.SomeMethod();

Console .WriteLine( "Doing stuff. Foo.SomeMethod results: {0}" ,

someResults);

}



private readonly Foo foo;

}

}




* This source code was highlighted with Source Code Highlighter .








рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рднрд░рдиреЗ рдФрд░ IFoo рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдпрд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЕрд╕рдВрднрд╡ рд╣реИред рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕реА рдФрд░ рдХрд╛ рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ, рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рджрд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рд╣рдореЗрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрдм рдкрд░реАрдХреНрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ; рдФрд░ рдпрд╣ рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ рдЬрдм рдпрд╣ рдХреЛрдб рдмрджрд▓рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ; рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╛ рдмрд╛рд╣рд░реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдкрд░реАрдХреНрд╖рдг рдЖрдкрдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИред



рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд▓рдЧ рдЗрд╕ рдЙрдкрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдореЛрд▓реНрд╕ - рдорджрдж рдХрд░реЗрдВрдЧреЗред рдореЛрд▓реНрд╕ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рдиреЗрд╕реНрдЯреЗрдб рдиреЗрдорд╕реНрдкреЗрд╕ (рдУрд░рд┐рдЬрд┐рдирд▓ рдиреЗрдорд╕реНрдкреЗрд╕ )ред рдореЛрд▓реНрд╕ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрдирдореЗрдВ рдЙрдкрд╕рд░реНрдЧ S рдХреЗ рдмрдЬрд╛рдп рдЙрдкрд╕рд░реНрдЧ M рд╣реЛрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд░реНрдЪреБрдЕрд▓ рддрд░реАрдХреЛрдВ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЧреИрд░-рд╡рд░реНрдЪреБрдЕрд▓ рд╕реНрдЯреЗрдЯрд┐рдХ рддрд░реАрдХреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЛрд▓реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ CLR Profiler рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХреЙрд▓рдмреИрдХ ICorProfilerCallback :: JITCompilationStarted рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЗ рдмрдЬрд╛рдп "рдзрдХреНрдХрд╛" рджреЗрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрд▓рд╛рд╕ рдкреНрд▓реЗрд╡рд┐рдердореЙрд▓реНрд╕ рдЙрддреНрдкрдиреНрди рд╣реЛрдВрдЧреЗред Moles.M рдлреВ, рдФрд░ рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк FooConsumer рд╡рд░реНрдЧ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ (рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА) DoStuff рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



[TestMethod]

[HostType( "Moles" )]

public void DoStuffTestWithMoles()

{

var fooMole = new PlayingWithMoles.Moles.MFoo();

fooMole.SomeMethod = () => "Hello, Mole!" ;

var target = new FooConsumer(fooMole);

target.DoStuff();

}




* This source code was highlighted with Source Code Highlighter .








[HostType ("Moles")] рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдореЛрд▓реНрд╕ рдХрд╛ рд╕рд╛рд░рд╛ рдЬрд╛рджреВ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡реЗ рдХреЛрдб рдФрд░ CLR рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЗ "рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреЗрд╢рди" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдЯрдмреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рдкрд░ рд╣рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ: рд╕рд╛рдорд╛рдиред IFoo.SomeMethod рдкрд░рд┐рдгрд╛рдо: рдирдорд╕реНрддреЗ, рддрд┐рд▓!



рдЕрдм рдЖрдЗрдП рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рдкрд┐рдЫрд▓реА рдХрдИ рдкреЛрд╕реНрдЯреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рдЖрд╕-рдкрд╛рд╕ рдЯреИрдореНрдмреЙрд░реАрди рдХреЗ рд╕рд╛рде рдбрд╛рдВрд╕ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рд╡реЗрдм рдкреЗрдЬ рдХрдВрдЯреЗрдВрдЯ рдХреЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░рд┐рдЯреНрд░реАрд╡рд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рдореБрдЭреЗ рдХрднреА-рдХрднреА рдЗрдВрдЯрд░рдиреЗрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рдмрд┐рдирд╛ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдореИрдВ рд╣рд░ рдмрд╛рд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реБрдЖред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдирд┐рдпрдо рдмрд╛рд╣рд░реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ (рдЬреИрд╕реЗ рдлрд╛рдЗрд▓реЗрдВ, рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди, рдбреЗрдЯрд╛рдмреЗрд╕) рд╕реЗ рдЗрд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рдпреЗ рдкрд░реАрдХреНрд╖рдг рдЕрдм рдореЙрдбреНрдпреВрд▓рд░ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдПрдХреАрдХрд░рдг рд╣реЛрдВрдЧреЗред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдЦрд░рд╛рдм рд╣реИрдВ, рдирд╣реАрдВ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдХреЛрдб рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЗрди рдмрд╛рд╣рд░реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЪрд╛рд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред



рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ WebRequestor рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдПрдХ рд╡реЗрдм рдкреЗрдЬ рдПрдХреНрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд▓рдВрдмрд╛рдИ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ:



public class WebRequester

{

public void RequestWebPage( string url)

{

var request = WebRequest.Create(url);

var response = request.GetResponse();

Console .WriteLine( "Sync version. URL: {0}, Response content length: {1}" ,

url, response.ContentLength);

}

}




* This source code was highlighted with Source Code Highlighter .








рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рд╣рдореЗрдВ WebRequest рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдореЛрд▓реНрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдЕрд╕реЗрдВрдмрд▓реА рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рдЗрд╕рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ), "Moles рдЕрд╕реЗрдВрдмрд▓реА рдЬреЛрдбрд╝реЗрдВ" рдореЗрдиреВ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдлрд┐рд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк System.Behaviors.dll рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ , рдореВрд▓ System.dll рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕реНрдЯрдмреНрд╕ рдФрд░ рдореЙрд▓ рдХреЗ рд╕рд╛рдеред



рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



[TestMethod]

[HostType( "Moles" )]

public void RequestWebPageTest()

{

var mole = new System.Net.Moles.MHttpWebResponse();

mole.ContentLengthGet = () => 5;

// URL-.

// , :

//System.Net.Moles.MHttpWebRequest.AllInstances.GetResponse = (r) =>

// {

// if (r.RequestUri == new Uri("http://rsdn.ru"))

// return mole;

// return r.GetResponse();

// };

//

System.Net.Moles.MHttpWebRequest.AllInstances.GetResponse = (r) => mole;

WebRequester target = new WebRequester();

target.RequestWebPage( "http://rsdn.ru" );

}




* This source code was highlighted with Source Code Highlighter .








рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рд╣рдо рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ HttpWebResponse рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯрдм рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ System.Net рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред M HttpWebRespoonse рдирд╛рдо рдХреЗ рд╕рд╛рде рдХреБрдЫ рдиреЗрдорд╕реНрдкреЗрд╕ , рдФрд░ ContentLength рд╕рдВрдкрддреНрддрд┐ рдХреЗ "рдмреЙрдбреА" рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рд▓реИрдореНрдмреНрдбрд╛ рдХреЛ рд╣рдереЗрд▓реА рдкрд░ рд░рдЦрддреЗ рд╣реИрдВ рдЬреЛ 5 рд░рд┐рдЯрд░реНрди рдХрд░рддрд╛ рд╣реИред рдЕрдм рд╣рдо GetResponse рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рдХреЗ HttpWebRequest рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП GetResponse рд╡рд┐рдзрд┐ рдХреЛ "рд╕рдВрд╢реЛрдзрд┐рдд" рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ WebRequester рд╡рд░реНрдЧ рдХреЗ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯрдкреЗрдЬ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рдмрд┐рдирд╛: рд╕рд┐рдВрдХ рд╕рдВрд╕реНрдХрд░рдгред URL: rsdn.ru , рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рд╛рдордЧреНрд░реА рдХреА рд▓рдВрдмрд╛рдИ: 5ред



рдЕрдм рд╡реЗрдм рдкреЗрдЬ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, WebRequester рд╡рд░реНрдЧ рдХрд╛ RequestWebPageAsync рд╡рд┐рдзрд┐:



public void RequestWebPageAsync( string url)

{

var waiter = new ManualResetEvent( false );

var request = WebRequest.Create(url);

request.BeginGetResponse(

ar=>

{

var response = request.EndGetResponse(ar);

Console .WriteLine( "Async version. URL: {0}, Response content length: {1}" ,

url, response.ContentLength);

waiter.Set();

}, null );



waiter.WaitOne();

}




* This source code was highlighted with Source Code Highlighter .








рдкрд░реАрдХреНрд╖рдг рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рдпрдВрддреНрд░рдг рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ред рдЗрд╕ рдХреЛрдб рдореЗрдВ, рд╣рдо AsyncResult.AsyncWaitHandle рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ BeginGetResponse рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ RequestWebPageAsync рд╡рд┐рдзрд┐ рдЕрдиреБрд░реЛрдз рддрдХ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреА рд╣реИред рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдРрд╕реЗ "рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ" рд╕реЗ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рдореИрдВ рдХреЗрд╡рд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЪрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред



рддреЛ, рдЕрдм рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐:



[TestMethod]

[HostType( "Moles" )]

public void RequestWebPageAsyncTest()

{

var mole = new System.Net.Moles.MHttpWebResponse();

mole.ContentLengthGet = () => 5;

// ,

//

Action action = () => Thread.Sleep(500);



// , ,

//

// - (-,

// ).

ThreadPool.SetMinThreads(3, 3);

System.Net.Moles.MHttpWebRequest.AllInstances.BeginGetResponseAsyncCallbackObject =

(r, a, iar) => action.BeginInvoke(a, iar);

System.Net.Moles.MHttpWebRequest.AllInstances.EndGetResponseIAsyncResult =

(r, iar) => { action.EndInvoke(iar); return mole; };

WebRequester target = new WebRequester();

target.RequestWebPageAsync(http: //rsdn.ru);

}




* This source code was highlighted with Source Code Highlighter .








рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо рдлрд┐рд░ рд╕реЗ M HttpWebResponse рд╕реНрдЯрдм рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг ContentLength рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░ 5 рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдПрдХ рд▓рдВрдмреЗ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереНрд░реЗрдб рд╕реЗрд▓реЗрдк (500) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдкрд░, рд╣рдореЗрдВ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИ: Async рд╕рдВрд╕реНрдХрд░рдгред URL: rsdn.ru , рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд▓рдВрдмрд╛рдИ рд╕рд╛рдордЧреНрд░реА: 5. рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛!



рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп





рдореЛрд▓реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╕реНрдЯрдмреНрд╕ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛, рдФрд░ рдЖрдкрдХреЛ рдмрд╛рд╣рд░реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ, рд╕реНрдерд┐рд░ рдпрд╛ рдЧреИрд░-рдЖрднрд╛рд╕реА рддрд░реАрдХреЛрдВ рд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдЕрдирдЯрд╛рдЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдмреНрд╕ рдмрдирд╛рдирд╛ рдПрдХ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдмрд╕ рдЕрд╕рдВрднрд╡ рд╣реИред рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдЗрд╕ рдЯреВрд▓ рдХреА рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рд▓рд╛рдЧреВ (рдпрд╛ рдирд╣реАрдВ) рд╣реИред



рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реНрдЯрдл рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред



All Articles