new作为修饰符时的使用,以及接口的显式实现
先上代码:
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时,就会重写从基类继承过来的方法,那么,就怎么也调用不到基类的那个方法了。
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时,就会重写从基类继承过来的方法,那么,就怎么也调用不到基类的那个方法了。
posted on 2008-06-26 18:28 bartholomew 阅读(276) 评论(0) 收藏 举报

浙公网安备 33010602011771号