C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
The new modifier specifies that a method is supposed to hide a base method. It eliminates a warning issued by the compiler. No functionality is changed. But an annoying warning is silenced.
Example. This program introduces two classes, A and B. The B class derives from the A class. Next, class A has a public method Y, while class B has a public method Y that uses the new keyword to hide the base method Y.
Note: The new keyword prevents a warning from the C# compiler when this program is compiled.
C# program that uses new modifier
using System;
class A
{
public void Y()
{
Console.WriteLine("A.Y");
}
}
class B : A
{
public new void Y()
{
// This method HIDES A.Y.
// It is only called through the B type reference.
Console.WriteLine("B.Y");
}
}
class Program
{
static void Main()
{
A ref1 = new A(); // Different new
A ref2 = new B();
B ref3 = new B();
ref1.Y();
ref2.Y();
ref3.Y();
}
}
Output
A.Y
A.Y
B.Y



In this example, we use the A and B types. With ref1, the base class is used directly. This results in the A.Y method being used. For ref2, the base class is used with a derived class. This results in the A.Y method being used again.
Tip: For ref2, the A.Y method is used because the override keyword is not used on B.Y.
Finally: With ref3, the derived class is used directly. The "new" method B.Y is thus used.
Specification. The annotated C# specification discusses the new modifier on page 433. The main reason the new modifier is included in the language is to instruct the compiler not to issue a warning when hiding is intended.
Apparently, a common programming error occurs when a developer does not realize a method is actually hiding (not overriding) a base method. Many design features in the C# language are intended to reduce common errors like this one.
Summary. The new keyword has multiple uses. We looked at the new modifier on a method in a derived type. We then demonstrated how the object hierarchy is used to locate the correct implementation to call.
Review: We looked at some reference material for the new modifier. The new modifier is not the same as the new class constructor.