显式隐式实现接口
一般来说在类中实现接口不需要指定接口的名称,即隐式实现接口,接口成员默认public访问修饰符,不能额外定义访问修饰符,public也不行,接口成员被隐式实现的访问修饰符也只能是public.
(图片来源网络,侵删)
如果类实现的多个接口中,不同的接口中有同名的成员,如自动属性或方法等,那么必须指定该成员实现的是哪个接口,即显式实现接口成员,类中显式实现成员的访问修饰符默认为private,也只能是private, 这样显示实现的接口成员就只能被接口对象调用,防止被类对象调用,如下demo:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 显式隐式实现接口 { class Program { static void Main(string[] args) { //声明接口对象, IBird TianE = new Bird(); TianE.Age = 2;//显示实现iBirdh的接口属性IBird.Age,该成员只有IBird接口对象才能调用 ((Bird)TianE).Fly();//将IBird对象强转成Bird对象,才可以调用Fly()方法 Bird maque = new Bird(); maque.Age = 1;//隐式实现接口属性Age,此时调用的是类的public属性Age,IBird修饰符为默认的private,就是为了方式被类调用 int x = maque.Age; maque.Swim(); } } class Bird : IBird,IFish { private int age; public void Fly() { Console.WriteLine("can fly"); } //显示实现接口,接口名.接口成员名 访问修饰符private 防止类调用 int IBird.Age { get =>age; set => age = value; } public void Swim() { Console.WriteLine("can swit"); } public int Age { get=>age;set=> age = value; } } interface IBird { void Fly(); //自动属性,快速实现方式:Prop + 两个Tab键 int Age { get; set; } } interface IFish { void Swim(); int Age { get; set; } } }
(图片来源网络,侵删)
(图片来源网络,侵删)
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...