C#本质论6.0第七章:接口

2021-07-05 04:04

阅读:522

标签:创建   override   应用   inter   def   ble   value   tin   源代码   

接口:

概述:

接口能将实现细节和提供的服务完全隔离开。接口既不包括实现,也不包括数据。

接口实现:(待补)

要实现的接口和基类名称以逗号分隔,基类在前,接口顺序任意。类可实现多个接口,但只能从一个基类直接派生。一旦某个类声明自己要实现接口,接口的所有成员都必须要实现。抽象类允许提供接口成员的抽象实现。

接口永远不能实例化,不能使用new创建接口,所以接口没有终结器。接口不能包含静态成员。不可以为接口成员显式的使用abstract修饰符。

  • 显式成员实现:显式实现的方法只能通过接口本身调用;为此最典型的方法是将对象转型为接口。声明显式接口成员实现要在成员名之前附加接口名前缀。
  • 隐式成员实现:要隐式实现成员,只要求成员是公共的,而且签名与接口成员的签名相符,接口成员实现不需要override关键字或者其他任何表明该成员与接口关联的指示符。此外,由于成员是像其他类成员那样声明的,所以可以像调用其他类成员那样直接调用隐式实现的成员。

在实现类和接口之间转换:

从实现类型向它的已实现接口的转换是隐式转换,不需要转型操作符。实现类型的实例总是包含接口的全部成员,所以对象总是能成功转换为接口类型。可能有多个类型都实现了同一个接口,所以无法保证从接口向实现类型的向下转型能成功。因此,从接口转换为它的某个实现类型,需要执行一次显式的强制转型。

interface IReadableSettingProvider
{
    string GetSetting(string name,string defaultValue);
}

interface ISettingProvider : IReadableSettingProvider
{
    string SetSetting(string name,string value);
}

class FileSettingProvider : ISettingProvider
{
    #region ISettingProvider Members
    public void SetSetting(string name,string value)
    {
        //...
    }
    #endregion
    
    #region IReadableSettingProvider
    public void GetSetting(string name,string defaultValue)
    {
        //...显式实现GetSetting(),必须通过IReadableSettingProvider进行
    }
    #endregion
}
  • 可以使用类似于类实现多接口的方式实现多接口继承。

接口上的拓展方法:

语法与作用于类时一样,方法的第一个参数是要拓展的接口,该参数必须附加this修饰符。扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。 仅当你使用 using 指令将命名空间显式导入到源代码中之后,扩展方法才位于范围中。

C#不仅允许为特定类型的实例添加拓展方法,还允许为那些对象的集合添加拓展方法。

通过接口实现多继承:

类只能从一个基类派生,但是可以实现任意数量的接口。

版本控制:

假定一个组件或应用程序供其他开发者使用,那么在创建它的新版本时不应改动接口。接口在负责实现的类和使用接口的类之间订立了契约,改动接口相当于改动契约,会使基于接口编写的代码失效。

C#本质论6.0第七章:接口

标签:创建   override   应用   inter   def   ble   value   tin   源代码   

原文地址:https://www.cnblogs.com/zhang-mo/p/9834065.html


评论


亲,登录后才可以留言!