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月5日 20:00
下一篇 2021年3月6日 00:42

相关推荐

  • 2.10C#函数成员之终结器(Finalizer)

    终结器声明 终结器(Finalizer),以前称为 析构函数(Destructor),用于在类实例被垃圾回收器回收时执行任何必要的最终清理操作。因此,无法在结构中定义终结器,它们仅用于类。 终结器的声明方式与方法相似,名称为所属类的名称前加~波浪号,不过既不能包含参数和可访问性修饰符,也不能进行显式调用。 重载 终结器…

    C#语言教程 2021年2月10日
    03230
  • 2.3C#数据成员之字段(Field)

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

    C#语言教程 2021年2月3日
    03460
  • 3.3C#值类型之枚举(Enum)

    枚举声明 所有枚举继承自 System.Enum类(继承自 System.ValueType)。 枚举类型 定义了一组常量值。 每个 enum 类型都有一个基础类型(必须是八种整型类型之一)。默认情况下,枚举常量的基础类型为 int,它们从 0 开始,并按定义…

    C#语言教程 2021年3月3日
    02880

发表评论

登录后才能评论