Favicon

New modifier

Peponi11/27/20242m

C#
SyntaxKeywordModifier

1. Introduction

new 한정자는 override와 달리 동일한 이름을 가진 상속받은 멤버를 숨기는 데 사용한다. new 한정자 없이 멤버를 숨기는 것이 가능하지만, 컴파일러에서는 CS0108 경고를 출력한다. (반대로, 숨길 것이 없을 때 new 한정자를 사용하면 CS0109 경고가 출력된다.)

new 한정자를 사용하면 컴파일러에서는 명시적으로 선언한 것으로 받아들여 경고가 발생하지 않는다. 한정자를 이용하여 상속된 멤버를 숨기더라도, 캐스팅 또는 정규화된 이름을 통해 상속된 멤버에 접근할 수 있다.

2. Example

public class Base
{
    public string Foo() => "Foo";
 
    public class Inner { }
}
 
public class Derived : Base
{
    public new string Foo() => "Foo2";
 
    public new class Inner { }
 
    // public string Foo() => "Foo2";        // CS0108
    // public new string Foo2() => "Foo2";   // CS0109
}
 
private static void Main()
{
    var foo = new Derived();
 
    Console.WriteLine(foo.Foo());            // Foo2
    Console.WriteLine(((Base)foo).Foo());    // Foo
}

3. 참조 자료