new作为修饰符时的使用,以及接口的显式实现
2008-06-26 18:28
225 查看
先上代码:
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#region IA Members
void IA.Output()
{
Console.WriteLine("AClass Output Exlicitly");
}
#endregion
}
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#region IA Members
void IA.Output()
{
Console.WriteLine("AClass Output Exlicitly");
}
#endregion
}
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时,就会重写从基类继承过来的方法,那么,就怎么也调用不到基类的那个方法了。
相关文章推荐
- (了解)类前置声明实现接口和实现分离 必须使用指针 且不能作为基类
- java 局部内部类的一般用途是实现某个接口,并作为这个接口传出方法被使用
- 使用注解方式实现Dubbo搭建,解决消费者调用接口出现空指针异常以及事务等问题
- 使用postMan实现接口测试以及接口自动化回归测试(http协议)
- 使用CXF实现Webservice的服务接口提供以及相关的客户端实现
- Face++在线接口在Android下的使用,以及简单的Demo实现(判断两张脸是否为同一个人)
- spring Autowired注释以及如何使用接口对象实现解耦
- C#中using以及实现接口IDisposable的使用方法
- Caffe中实现LSTM网络的思路以及LSTM网络层的接口使用方法。 本文描述了论文《Long-term recurrent convolutional networks fo
- Qt tableview 使用ComboBox作为delegate时,实现单个cell中的comboBox的item动态变化以及独特性
- Face++在线接口在Android下的使用,以及简单的Demo实现(判断两张脸是否为同一个人)
- 安卓四大组件之一#2-一使用Intent显式意图实现界面跳转以及数据传递
- C#中基类、派生类以及使用接口来实现多重继承
- 谨慎使用显式接口方法实现
- 一个接口Test可以被new吗?new完就可以直接使用Test中的方法了吗(其实Test中的方法在TestIMP中实现)?
- ihttpmodule 接口以及使用
- 使用轮廓以及扇形扫描实现qq的验证码识别
- mysql 下 计算 两点 经纬度 之间的距离 含具体sql语句以及伪列作为查询条件实现
- 使用Runnable接口实现资源共享的一些心得
- 从模板引擎到模板引擎-使用aspx页面作为模板引擎的一种实现