Runtime: ์ผ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Œ

์— ๋งŒ๋“  2018๋…„ 08์›” 10์ผ  ยท  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

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Print ()๋ฅผ 'new' ํ•˜๋ฉด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” PrintMe ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ œ๋„ค๋ฆญ์ด ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

Print ()๋ฅผ 'new' ํ•˜๋ฉด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” PrintMe ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ œ๋„ค๋ฆญ์ด ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ CLR์ดํ•˜๋Š” ์ผ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด ์•„๋‹ˆ๋ผ ์–ธ์–ด๊ฐ€ํ•˜๋Š” ์ผ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. C # ์‚ฌ์–‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์„ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ช…์‹œ ์ ์œผ๋กœ ๋‹ค์‹œ ๊ตฌํ˜„ ํ•˜์ง€ ์•Š์œผ๋ฉด ํŒŒ์ƒ ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค์—์„œ ์ƒ์†ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋งคํ•‘์„ ์–ด๋–ค ์‹ ์œผ๋กœ๋“  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์‚ฌ์–‘์€ ์œ„์˜ ๊ฒƒ๊ณผ ๊ฑฐ์˜ ๋™์ผํ•œ ์˜ˆ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋ ค๋ฉด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

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

@svick ๋‹ต๋ณ€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

chunseoklee picture chunseoklee  ยท  3์ฝ”๋ฉ˜ํŠธ

btecu picture btecu  ยท  3์ฝ”๋ฉ˜ํŠธ

jzabroski picture jzabroski  ยท  3์ฝ”๋ฉ˜ํŠธ

aggieben picture aggieben  ยท  3์ฝ”๋ฉ˜ํŠธ

GitAntoinee picture GitAntoinee  ยท  3์ฝ”๋ฉ˜ํŠธ