
























先上代码:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
BClass b = new BClass();

((AClass)b).Output();
b.Output();
((IA)b).Output();

Console.ReadLine();
}
}

public interface IA
{
void Output();
}

public abstract class AClass : IA
{
public AClass()
{
Console.WriteLine("AClass
");
}

public virtual void Output()
{
Console.WriteLine("AClass Output
");
}

IA Members
}

public class BClass : AClass
{
public BClass()
{
Console.WriteLine("BClass
");
}

public new void Output()
{
Console.WriteLine("BClass Output
");
}
}
}
输出为:
AClass...
BClass...
AClass Output...
BClass Output...
AClass Output Exlicitly...
将代码中的new 替换为override,则输出变为:
AClass...
BClass...
BClass Output...
BClass Output...
AClass Output Exlicitly...
从以上代码我们可以看出:
new 作为修饰符时,其作用是隐藏从基类继承过来的方法,注意,仅仅是隐藏,这就意味着我们还是有办法调用到被隐藏的那个方法。而要调用被隐藏的那个方法,实现办法和要调用显示实现的接口方法一样。
而如果用override时,就会重写从基类继承过来的方法,那么,就怎么也调用不到基类的那个方法了。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。