显式隐式实现接口

本文介绍了C#中类如何隐式和显式实现接口,强调了访问修饰符在接口成员上的作用,以及显式实现接口时的私有化设计以避免类对象误调用。同时展示了接口多态性的体现。
摘要由CSDN通过智能技术生成

一般来说在类中实现接口不需要指定接口的名称,即隐式实现接口,接口成员默认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;//显示实现iBird的接口属性IBird.Age,该成员只有IBird接口对象才能调用

            IBird对象赋值的是Bird类对象,IBird对象能调用Bird类方法,这就是接口也能实现的多态效果
            TianE.Fly();//IBird对象,可以调用实现该接口的Fly()方法
            //Bird对象也能调用方法Fly()
            ((Bird)TianE).Fly();

            //Bird成员Bark(),不是IBird的实现,所以TianE不能调用该方法,必须先强转成Bird对象才可以,如下
            ((Bird)TianE).Bark();

            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; }
        
        //Bird类的public方法,但不是IBird接口的实现成员
        public void Bark()
        {
            Console.WriteLine("小鸟会叽叽喳喳叫");
        }
    }

    interface IBird
    {
        void Fly();
        //自动属性,快速实现方式:Prop + 两个Tab键
        int Age { get; set; }
    }
    interface IFish
    {
        void Swim();
        int Age { get; set; }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值