3.5C#引用类型之接口(Interface)

1.接口声明

接口包含一组非抽象classstruct必须实现的相关功能的定义。

interface I接口名<类型参数> 
{
    //接口体
}

2.继承

接口 可以继承自多个基接口。

interface 接口: 基接口1[, 基接口N]

3.实现

3.1实现

类 或 结构 可以实现多个接口,实现接口的类或结构必须实现其所有未提供默认实现的成员并匹配接口中的成员签名,非必须重写实现具有默认实现的成员。

//类实现接口
class : 接口1[, 接口N] 
{
    //类体
}

//结构实现接口
struct : 接口1[, 接口N] 
{
    //结构体
}

3.2默认实现

接口可以为其部分或全部成员定义默认实现private 成员必须定义默认实现

如果类重写实现接口的默认实现的方法,则相当于正常实现。

如果类未重写实现接口的默认实现的方法,则会从接口继承默认实现的方法,则只能通过接口类型的引用访问该方法。

public interface IControl
{
    void Paint() => Console.WriteLine("Default Paint method");
}
public class SampleClass : IControl
{
    // Paint() is inherited from IControl.
}

var sample = new SampleClass();
//sample.Paint();// "Paint" isn't accessible.
var control = sample as IControl;
control.Paint();

3.3显式实现

通过在类成员前面加上接口名称和句点可命名该类成员,显式接口实现是一个类成员,只能通过接口实例访问,不能通过类实例访问。

显式实现还用于处理两个接口分别声明名称相同的不同成员(例如属性和方法)的情况,避免编译器错误。

public interface IControl
{
    void Paint();
}
public interface ISurface
{
    void Paint();
}

public class SampleClass : IControl, ISurface
{
    void IControl.Paint()
    {
        System.Console.WriteLine("IControl.Paint");
    }
    void ISurface.Paint()
    {
        System.Console.WriteLine("ISurface.Paint");
    }
}

4.分部(partial)接口

拆分一个接口的定义到两个或更多的文件中,每个文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来。

partial interface ITest
{
    void Interface_Test();
}

partial interface ITest
{
    void Interface_Test2();
}
//合并后
interface ITest
{
    void Interface_Test();
    void Interface_Test2();
}

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/csharplang/7875.html

(0)
上一篇 2021年3月4日 23:24
下一篇 2021年3月5日 23:25

相关推荐

  • 1.4C#语言的类型(Type)

    C # 语言有两种类型:值类型 和 引用类型。值类型的变量直接存储数据,而引用类型的变量则存储对数据(称为“对象”)的引用。 System.Object类(别名object) 是所有类型的最终基类。值类型 派生自 System.ValueType类 (派生自 System.Object类)。派生自&…

    C#语言教程 2021年1月4日
    08170
  • 2.3C#数据成员之字段(Field)

    字段是与类或类实例相关联的变量,字段定义存储位置。 1.字段声明和初始化 同变量。 2.字段分类 名称 修饰符 静态字段 用 static 修饰 实例字段 无 static 修饰 3.readonly修饰符 在字段声明中,readonly 修饰符表示只能 在声明期间初始化时或在同一个类的静态或实例构造函数中 …

    C#语言教程 2021年2月3日
    07090
  • 3.13C#语言的泛型(Generic)

    1.泛型类 类型参数跟在类名后面。 2.泛型接口 类型参数跟在接口名后面。 3.泛型方法 类型参数跟在方法名后面。 方法调用时,可以根据实参推断出类型参数的类型,无需显式指定。 4.构造(Constructed)类型 封闭式构造(closed constructed)类型:指定类型参数,例如,Node<int&g…

    C#语言教程 2021年3月13日
    02390

发表回复

登录后才能评论