x
CLR via C#中的一个小结将标题定为:"13.5 隐式和显式接口方法实现(幕后发生的事情)"...
直接上代码
public interface I { int GetIntFun(); int GetIntFunVirtual(); string GetStrFun(); } public class 我是一个类名字叫雷雷 : I { /// <summary> /// 隐式实现-派生类不可以重写 /// 0.必须标记为public,否则报错:{“我是一个类名字叫雷雷”不实现接口成员“I.GetIntFun()”。“我是一个类名字叫雷雷.GetIntFun()”无法实现接口成员,因为它不是公共的。} /// </summary> /// <returns></returns> public int GetIntFun() { return 0; } /// <summary> /// 隐式实现-派生类可以重写 /// </summary> /// <returns></returns> public virtual int GetIntFunVirtual() { return 0; } /// <summary> /// 显式实现 /// 0.不允许指定可访问性(但是,编译器生成方法的元数据时,可访问性会设为private) /// 1.不允许标记virtual /// 1.只有通过接口类型的变量才能调用 /// </summary> /// <returns></returns> string I.GetStrFun() { return ""; } } /// <summary> /// 扩展知识点, /// 涉及virtual ,sealed ... /// new关键字,使派生类隐藏父类方法 /// </summary> public class 我是一个类名字叫小雷 : 我是一个类名字叫雷雷 { public override int GetIntFunVirtual() { return base.GetIntFunVirtual(); } public new int GetIntFun() { return 1; } }
调用
class Program { static void Main(string[] args) { 我是一个类名字叫雷雷 ll = new 我是一个类名字叫雷雷(); ll.GetIntFun(); ll.GetIntFunVirtual(); //ll.GetStrFun();//报错!!!显式实现,派生类访问不到的 I i = new 我是一个类名字叫雷雷(); i.GetIntFun(); i.GetIntFunVirtual(); i.GetStrFun(); 我是一个类名字叫小雷 xl = new 我是一个类名字叫小雷(); xl.GetIntFun(); xl.GetIntFunVirtual(); Console.ReadKey(); } }
x
原文地址:https://www.cnblogs.com/love-zf/p/9321057.html
时间: 2024-11-05 12:19:09