C#显式实现接口和隐式实现接口的区别及优缺点

继承Interface接口之后,VS会显示两个实现接口的方式:实现接口、显式实现接口。

先看代码,接口类如下:

 interface IFileOperator
 {
     bool WriteFile(string filePath);

     bool ReadFile(string filePatth,out IReadFileModel readModel);
 }

在子类中显式实现

public class ControlListXmlOperator : IFileOperator
{
    bool IFileOperator.ReadFile(string filePatth, out IReadFileModel readModel)
    {
        throw new NotImplementedException();
    }

    bool IFileOperator.WriteFile(string filePath)
    {
        throw new NotImplementedException();
    }
}

//正确的调用方式
string path;
IFileOperator  obj = new ControlListXmlOperator();
obj.WriteFile(path);

//错误的调用方式
string path;
ControlListXmlOperator  obj = new ControlListXmlOperator();
obj.WriteFile(path);

隐式实现

public class ControlListXmlOperator : IFileOperator
{
   public bool ReadFile(string filePatth, out IReadFileModel readModel)
   {
       throw new NotImplementedException();
   }

   public bool WriteFile(string filePath)
   {
       throw new NotImplementedException();
   }
}

//可以使用两种调用方式
//方式一
string path;
IFileOperator  obj = new ControlListXmlOperator();
obj.WriteFile(path);

//方式二
string path;
ControlListXmlOperator  obj = new ControlListXmlOperator();
obj.WriteFile(path);

区别:

(1)显式实现方法带前缀,隐式无前缀

(2)显示实现接口时不能在覆盖的方法或字段上使用访问权限关键字【private、protected、public等】

(3)隐示实现接口和类都可以访问 显示实现只有接口可以访问

优缺点:

(1)显示实现益处隐藏代码的实现

(2)在使用接口访问的系统中,调用者只能通过接口调用而不是底层的类来访问

(3)当类实现多个接口时,并且接口中包含相同的方法签名,此时使用显式接口实现。即使没有相同的方法签名,仍推荐使用显式接口,因为可以标识出哪个方法属于哪个接口

你可能感兴趣的:(编程语言)