Runtime: рдЬреЗрдиреЗрд░рд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдЕрдЧре░ 2018  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dotnet/runtime

.NET 2/3/4 / 4.5 / 4.6.1 & .Net Core 2.1 рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдирдореВрдирд╛ рдХреЛрдб рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреНрдпреЛрдВ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ?

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ PrintIt<T> рдХрд╛ рдХреЙрд▓ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ Bar рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрднреА рднреА рд╕рд╣реА рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдирдореВрдирд╛ рдХреЛрдб:

interface PrintMe
{
    void Print();
}

class Foo : PrintMe
{
    public void Print()
    {
        Console.WriteLine("Foo!");
    }
}

class Bar : Foo
{
    public new void Print()
    {
        Console.WriteLine("Bar!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        PrintIt<Foo>();
        PrintIt<Bar>();

        var foo = new Foo();
        var bar = new Bar();

        foo.Print();
        bar.Print();

        Console.ReadKey();
    }

    static void PrintIt<T>() where T : PrintMe, new()
    {
        new T().Print();
    }
}

рдЖрдЙрдЯрдкреБрдЯ:

Foo!
Foo!
Foo!
Bar!

рдЕрдкреЗрдХреНрд╖рд┐рдд рдЙрддреНрдкрд╛рджрди:

Foo!
Bar!
Foo!
Bar!
question tracking-external-issue

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЬрдм рдЖрдк 'рдирдпрд╛' рдкреНрд░рд┐рдВрдЯ () рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣ рд╡рд┐рдзрд┐ PrintMe рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдЖрдкрдХреЛ рд╡рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдЧрд╛

((PrintMe)new Bar()).Print();

рдХреЛрдИ рдЬреЗрдирд░рд┐рдХ рдирд╣реАрдВред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЬрдм рдЖрдк 'рдирдпрд╛' рдкреНрд░рд┐рдВрдЯ () рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣ рд╡рд┐рдзрд┐ PrintMe рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдЖрдкрдХреЛ рд╡рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдЧрд╛

((PrintMe)new Bar()).Print();

рдХреЛрдИ рдЬреЗрдирд░рд┐рдХ рдирд╣реАрдВред

рдпрд╣ рдПрдХ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реАрдПрд▓рдЖрд░ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИред C # рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╣рддрд╛ рд╣реИ :

рдПрдХ рд╡рд░реНрдЧ рдЕрдкрдиреЗ рдмреЗрд╕ рдХрдХреНрд╖рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗрддрд╛ рд╣реИред

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ

рдХрд▓реНрдкрдирд╛ рддрдм рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рдЬреЛ рдКрдкрд░ рд╡рд╛рд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реИред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рд╣реИ, рдЖрдкрдХреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

c# class Bar : Foo, PrintMe { public new void Print() { Console.WriteLine("Bar!"); } }

@ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕