认真CS☀️显式接口 & 隐式接口

在这里插入图片描述

目录

🟥 接口

1️⃣ 隐式实现接口

2️⃣ 显式实现接口

🟩 Add


🟥 接口

1️⃣ 隐式实现接口

using System;

class a
{
    //隐式实现接口
    interface IA
    {
        void funcA();
    }

    interface IB
    {
        void funcA();
    }

    class C : IA,IB
    {
        public void funcA()
        {
            Console.Write("hello");
        }
    }
} 

在此代码中,我们不知道C为IA的实现,还是IB的实现,因此需要显式实现接口

 

2️⃣ 显式实现接口

隐式接口实现,即没有指定实现哪个接口方法。显式的接口实现,指的是在实现过程中,明确指出实现哪一个接口的哪一个方法。

using System;

class a
{
    interface IChinese
    {
        void funcA();
    }

    interface IEnglish
    {
        void funcA();
    }

    class C : IChinese,IEnglish
    {
        void IChinese.funcA()
        {
            Console.Write("你好");
        }
        void IEnglish.funcA()
        {
            Console.WriteLine("Hello");
        }
    }

    static void Main()
    {
        IChinese ic = new C();
        ic.funcA();    //输出 你好

        IEnglish ie = new C();   //先转化为接口,再调用方法
        ie.funcA();   //输出  Hello
    }
}

使用显式接口实现方法时,需注意:

1、若显式实现接口,方法不能使用任何访问修饰符,显式实现默认的成员为私有

2、显式实现的成员默认为私有的,且方法不能使用任何访问修饰符,所以无法修改访问级别(隐式实现接口可修改访问级别),此时正确的访问方式是把“实现类”显示转化为对应的接口,通过该接口来调用显式实现内的方法

3、当实现单个接口时,通常使用隐式接口,因为对象可以直接访问接口方法

4、实现多个接口时,一般推荐使用显式的接口

下面案例,实现继承自接口,且实现作为实参调用到方法参数列表的形参中去(形参是接口类),完成这个过程实现即自动转化成接口,该方法输出并且调用的是接口的方法,即可只要是实现,无论什么类,都可用在这个方法运行

using System;

class a
{
    interface IChinese
    {
        string funcA();
        string funcB();
    }

    class C : IChinese
    {
        public string funcA()
        {
            string a="你好";
            return a;
        }
        public string funcB()
        {
            string b = "Hello";
            return b;
        }
    }


    static void method(IChinese ic)
    {
        Console.WriteLine("{0},{1}", ic.funcA(), ic.funcB());   //调用的是接口的方法
    }

    static void Main()
    {
        C d = new C();
        method(d);
    }
}

 

 

🟩 Add

仔细观察下面两个文件的代码,方法写在不同的文件里,myMethod()方法写在不同文件里,具体实现过程也是不一样的。

下面展示的是只继承接口,调用另一个文件的类名+方法,完成实现目的

也可将方法写在实现里,直接调用方法就行了

也可在接口里用类把接口和myMethod方法都括起来,这样在实现里面就需要继承接口的  类名+接口名,调用接口文件的类名+方法名

等等,思考并灵活运用

using System;

namespace ns
{


    public interface IChinese
    {
        string funcA();
        string funcB();

    }

    class method
    {
        public static void myMethod(IChinese ic)
        {
            Console.WriteLine("{0},{1}", ic.funcA(), ic.funcB());
        }
    }

}

using System;
using ns;

public class mc : IChinese
{

    public string funcA()
    {
        string a = "我是funcA";
        return a;
    }

    public string funcB()
    {
        string b = "我是funcB";
        return b;
    }


    static void Main()
    {
        method.myMethod(new mc());
    }
}

 

 

大家还有什么问题,欢迎在下方留言!


 

在这里插入图片描述


如果你有 技术的问题 或 项目开发

都可以加下方联系方式

和我聊一聊你的故事🧡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值