New modifier
Peponi │ 11/27/2024 │ 2m
C#
SyntaxKeywordModifier
New modifier
11/27/2024
2m
Peponi
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
}