C# 接口类型

什么是接口

个人理解,接口有点像 C 语言的前置申明。I开头命名,默认为 public, 分号结束,没有实现体。继承它的类必须全部实现接口成员。

1
2
3
4
public interface IComparable
{
int CompareT0(object obj);
}

实现接口

接口放在基类后面,类可以继承多个接口,用,号分开。

1
2
3
4
5
6
7
class Cat : Animal, ILiveBird
{
string ILiveBird.BabyCalled()
{
return "Kitten";
}
}

接口是引用类型

接口是引用类型。

接口类型转换建议用as运算符

as运算符的强制转换时,失败返回null,不会引发异常。

实现具有重复成员的接口

类内可以实现单个成员即可满足所有重复成员的接口。

派生类可以作为接口的实现

从基类派生过来的成员可以作为接口的实现成员。

显式接口成员

显式接口成员只能通过转化成接口引用类型才能实现访问,类实例不能够访问。

可以看之前的这篇笔记:https://blog.huvjie.com/2020/08/26/200826N02/

实现的显式接口成员前面不能加public等访问修饰符,因为类外根本不能够直接访问。但没有public也是可以被继承的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;

namespace ConsoleApp1
{
class Program
{
static void Main()
{
Test test = new Test();
ILiveBird liveBird = test as ILiveBird; // 需要强制转化
if (liveBird != null)
Console.WriteLine(liveBird.BabyCalled());
else
Console.WriteLine("null");
}
}

interface ILiveBird
{
string BabyCalled();
}
class Animal { }

class Cat : Animal, ILiveBird
{
string ILiveBird.BabyCalled()
{
return "Kitten";
}
}
class Test:Cat
{

}
}

输出:

1
Kitten  // 需要强制转化成接口类型

▲ 不能加`public`等访问修饰符

▲ 不能加public等访问修饰符

接口可以继承接口

当然在类内都要被实现。

不同类实现一个接口

可以看之前的这篇笔记:https://blog.huvjie.com/2020/08/26/200826N02/




参考:

  1. 详细的内容可以看下《C# 图解教程》 P275 页。
感谢支持!