CSharp 语言定义文档 - 13 接口的定义与用法

CSharp 语言定义文档 - 13 接口的定义与用法


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

为从泛型类型

S

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

为从泛型类型

S

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条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信