what is "public new virtual void Method()" mean?

c#

Solution

`new` and `virtual` are two (mostly-) unrelated keywords.

`new` means it shadows the base method. `virtual` allows subclasses to override it.

Calling the method through the interface results in the base method being called, since the base method is not `virtual` and the derived classes don't explicitly re-implement the interface (which would cause the method to be re-mapped)

Problem

when use new virtual key words to decorate the method? what is the affection? Like define an interface, and add a class to inherit the interface. but use the new virtual to realize the interface method. ``` interface IPrinter { void Print(); } public class PrinterOne : IPrinter { public void Print() { Console.WriteLine("PrinterOne."); } } public class PrinterTwo : PrinterOne { public new virtual void Print() { Console.WriteLine("PrinterTwo."); } } public class PrinterThree : PrinterTwo { public override void Print() { Console.WriteLine("PrinterThree."); } } public class PrinterFour : PrinterThree { public override void Print() { Console.WriteLine("PrinterFour."); } } static void Main(string[] args) { IPrinter iprinter = new PrinterFour(); iprinter.Print();//the output is PrinterOne? why??? Console.ReadLine(); } ```

Original source

Related problems