C# 接口的隐式与显示实现及适应场景
之前我在使用接口时,从未意识到接口还有隐式实现和显示实现之分。一次偶然的机会,在浏览博客时,我接触到了这个知识点。现在,我想通过自己的理解来记录一下,以便日后温故知新,同时也希望对有需要的朋友有所帮助。
我们来理解一下什么是接口的隐式实现和显示实现。通俗地讲,“显示接口实现”是指在使用接口名称作为方法名的前缀来实现接口;而传统的实现方式则被称为“隐式接口实现”。
让我们通过代码示例来进一步了解这两种实现方式:
假设我们有一个IAnimal接口:
```csharp
interface IAnimal
{
void Dog();
}
```
对于隐式接口实现,我们会这样定义一个Animal类并实现IAnimal接口:
```csharp
class Animal : IAnimal
{
public void Dog()
{
Console.WriteLine("dog...");
}
}
```
通过类或者接口都可以调用Dog方法:
```csharp
// 通过类调用
Animal animal = new Animal();
animal.Dog();
// 或者通过接口调用
IAnimal animal = new Animal();
animal.Dog();
```
这就是隐式接口实现的典型用法。
那么,显示接口实现又是怎样的呢?代码示例如下:
```csharp
interface IAnimal
{
void Dog();
}
class Animal : IAnimal
{
void IAnimal.Dog() // 显示接口实现,使用接口名称作为方法名的前缀
{
Console.WriteLine("dog...");
}
}
```
在这种情况下,只能通过接口来调用Dog方法:
```csharp
IAnimal animal = new Animal();
animal.Dog();
```
如果用类的方法来实现会显示错误,不允许。这就是显示接口实现的特性。虽然它在某些情况下可能显得不太方便,但它的存在是有道理的。在实际项目中,有时一个类可能需要继承多个接口,而这些接口中可能会有相同名称、参数和类型的值。在这种情况下,使用显示接口实现可以避免一些不必要的歧义。虽然我在项目中遇到的这种情况并不多(可能是因为项目规模较小),但显示接口实现仍然是一种有用的技术。隐式接口实现和显示接口实现各有适用的场景。当类实现一个接口时,通常使用隐式接口实现,这样可以方便地访问接口方法和类自身的方法和属性。而当类实现多个接口并且需要避免方法歧义时,推荐使用显示接口实现。即使没有相同的方法签名,显式接口实现也是一个很好的选择,因为它可以清晰地标识出哪个方法属于哪个接口。
编程语言
- C# 接口的隐式与显示实现及适应场景
- JavaScript中document.referrer的用法详解
- VS2015下简单使用EF框架的方法
- 实例解析jQuery中如何取消后续执行内容
- BootStrap入门教程(二)之固定的内置样式
- PHP中使用socket方式GET、POST数据实例
- React组件生命周期详解
- js 定义对象数组(结合)多维数组方法
- AngularJS基础 ng-paste 指令简单示例
- 解决vue中使用swiper插件问题及swiper在vue中的用法
- localStorage的黑科技-js和css缓存机制
- JavaScript正则表达式替换字符串中图片地址(img s
- jQuery插件pagination实现无刷新分页
- jquery中绑定事件的异同
- JS中创建函数的三种方式及区别
- JS实现图片放大缩小的方法