2024年6月20日发(作者:)
章节 13 接口
13. 接口
一个接口定义一个协定。实现某接口的类或结构必须遵守该接口定义的协定。一个接口可以从多个基接
口继承,而一个类或结构可以实现多个接口。
接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该
接口的类或结构必须提供的成员。
13.1 接口声明
interface-declaration 是用于声明新的接口类型的 type-declaration(第 9.6 节)。
interface-declaration:
attributes
opt
interface-modifiers
opt
partial
opt
interface
identifier variant-type-parameter-list
opt
interface-base
opt
type-parameter-constraints-clauses
opt
interface-body
;
opt
interface-declaration 由以下内容组成:一组可选 attributes(第 17 章),然后依次是一组可选 interface-
modifiers(第 13.1.1 节)、可选
partial
修饰符、关键字
interface
和用于命名接口的 identifier、可
选 variant-type-parameter-list 规范(第 13.1.3 节)、可选 interface-base 规范(第 13.1.4 节)、可选 type-
parameter-constraints-clauses 规范(第 10.1.5 节)、interface-body(第 13.1.5 节),最后是一个分号
(可选)。
13.1.1 接口修饰符
interface-declaration 可以根据需要包含一个接口修饰符序列:
interface-modifiers:
interface-modifier
interface-modifiers interface-modifier
interface-modifier:
new
public
protected
internal
private
同一修饰符在一个接口声明中多次出现属于编译时错误。
new
修饰符仅允许在类中定义的接口中使用。它指定接口隐藏同名的继承成员,详见第 10.3.4 节中的介
绍。
public
、
protected
、
internal
和
private
修饰符将控制接口的可访问性。根据接口声明所在的上
下文,只允许使用这些修饰符中的一部分(第 3.5.1 节)。
13.1.2 分部修饰符
partial
修饰符指示此 interface-declaration 为分部类型声明。封闭命名空间或类型声明中的多个同名分
部接口声明按照第 10.2 节中指定的规则组合成一个接口声明。
373
C# LANGUAGE SPECIFICATION
13.1.3 Variant 类型形参列表
Variant 类型形参列表只能在接口和委托类型上出现。与普通 type-parameter-list 的差异在于每个类型形
参上的可选 variance-annotation。
variant-type-parameter-list:
<
variant-type-parameters
>
variant-type-parameters:
attributes
opt
variance-annotation
opt
type-parameter
variant-type-parameters
,
attributes
opt
variance-annotation
opt
type-parameter
variance-annotation:
in
out
如果变化批注为
out
,则类型形参称为协变 (covariant)。如果变化批注为
in
,则类型形参称为逆变
(contravariant)。如果不存在变化批注,则类型形参称为是固定的 (invariant)。
在下面的示例中
interface C
{
X M(Y y);
Z P { get; set; }
}
X
为协变,
Y
为逆变,而
Z
为固定的。
13.1.3.1 变化安全性
类型的类型形参列表中出现变化批注会限制类型在类型声明中可以出现的位置。
如果存在以下情况之一,则类型
T
是输出不安全 (output-unsafe) 的:
•
T
为逆变类型形参
•
T
为具有输出不安全元素类型的数组类型
•
T
为从泛型类型
1
,… A
K
>
构造的接口或委托类型
S
1
, .. X
K
>
,其中,对于至少一个
A
i
,存在
以下情况之一:
o
X
i
是协变或固定的,而
A
i
是输出不安全的。
o
X
i
是逆变或固定的,而
A
i
是输入安全的。
如果存在以下情况之一,则类型
T
是输入不安全 (input-unsafe) 的 :
•
T
是协变类型形参
•
T
是具有输入不安全元素类型的数组类型
•
T
为从泛型类型
1
,… A
K
>
构造的接口或委托类型
S
1
, .. X
K
>
,其中,对于至少一个
A
i
,存在
以下情况之一:
o
X
i
是协变或固定的,而
A
i
是输入不安全的。
o
X
i
是逆变或固定的,而
A
i
是输出不安全的。
从直观上看,应在输出位置上禁止使用输出不安全类型,在输入位置上禁止使用输入不安全类型。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1718830661a2752922.html
评论列表(0条)