认真CS丨显式接口 & 隐式接口

接口

隐式实现接口

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的实现,因此需要显式实现接口


显式实现接口

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

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());
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_38239050/article/details/80072414