0

0

C# 2.0 Specification (四)

黄舟

黄舟

发布时间:2017-01-03 10:19:58

|

1310人浏览过

|

来源于php中文网

原创

这段比较短就先干掉了:)

23不完整类型

23.1不完整类型声明

新类型修饰符partial 用于在多个部分中定义一个类型。为了确保和现存程序的兼容性,这个修饰符和其他修饰符(比如get和set)是不同的,它不是一个关键字,并且它必须紧邻出现在关键字class ,struct或者interface之前。

l class-declaration(类声明)
attributes opt class-modifiers opt partialopt class identifier type-parameter-list opt
class-base opt type-parameter-constraints-clausesopt class-body ;opt
(特性 可选 类修饰符 可选 partial可选 class 标识符
类型参数列表 可选 :基类 可选 类型参数约束语句 可选 类体;可选)
l struct-declaration:(结构声明)
attributesopt struct-modifiersopt partialopt struct identifier type-parameter-listopt
struct-interfacesopt type-parameter-constraints-clausesopt struct-body ;opt
(特性 可选 结构修饰符 可选 partial 可选 struct 标识符
类型参数列表 可选
结构接口 可选 类型参数约束语句 可选
结构体;可选 )
l interface-declaration:(接口声明)
attributesopt interface-modifiersopt partialopt interface identifier type-parameter-listopt
interface-baseopt type-parameter-constraints-clausesopt interface-body ;opt
(特性可选 接口修饰符 可选 partial 可选 interface 标识符
类型参数列表 可选
基接口 可选 类型参数约束语句 可选
接口体 ;可选)

不完整类型声明的每个部分都必须包含partial修饰符,并且和其他部分必须被声明在相同的命名空间。partial修饰符表明该类型声明的附加部分可以存在于其他某个地方,但这种附加部分的存在并不是必需的;在一个单一类型声明中包含partial修饰符也是合理的。



不完整类型的所有部分必须放在一起编译,这样它们就可以在编译时被融合。特别的是,不完整类型不容许对已经被编译的类型进行扩展。



嵌套类型(nested type)可以通过使用partial修饰符而声明在多个地方。典型的情况是,包含类型(也就是包含嵌套类型的类型)同样使用partial声明,而嵌套类型的各个部分也在包含类型的不同部分中声明。

partial修饰符不能用在委托或枚举声明中。

23.1特性

不完整类型的特性通过以不定的(unspecified)顺序组合各个部分的特性而确定。如果一个特性被放在不完整类型的多个部分,它等价于在该类型上多次指定该特性。例如,这两个部分

[Attr1, Attr2("hello")]
partial class A {}
[Attr3, Attr2("goodbye")]
partial class A {}
等价于如下声明。
[Attr1, Attr2("hello"), Attr3, Attr2("goodbye")]
class A {}

类型参数上的特性也以相同的风格组合。

23.1.2修饰符

当不完整类型声明包含访问说明(public,protected,internal和private)时,它必须与其它部分的访问说明一致。如果不完整类型的各个部分都不包含访问说明,该类型将被赋予适当的默认可访问性(§3.5.1)。

如果嵌套类型的一个或多个不完整声明包含new修饰符,并且如果嵌套类型隐藏了一个继承成员,将不会有任何警告。(§3.7.12)



如果类的一个或多个不完整声明包含abstract修饰符,那么这个类就是抽象的(§10.1.1.1),反之就是非抽象的。



注意,一个类不能同时既是抽象的又是密封的(sealed)。


当unsafe修饰符被用于一个不完整类型声明时,只有特定的部分被认为是不安全上下[unsafe contex(§18.1))]。

23.1.3类型参数和约束

如果泛型类型在多个部分被声明,每个部分都必须说明类型参数。每个部分都必须有相同数量的类型参数,并且对于每个类型参数必须有相同的名字和顺序。

当不完整泛型声明包含类型参数约束(where 语句),该约束必须和其他部分的约束一致。特别的是,包含约束的每个部分必须具有相同集合类型参数的约束,并且对于每个类型参数,

类、接口和构造函数约束的集合必须是相同的。如果不完整泛型的任何部分都没有指定约束,类型参数就被认为是不带约束的。
示例

partial class Dictionary
where K: IComparable
where V: IKeyProvider, IPersistable
{
...
}
partial class Dictionary
where V: IPersistable, IKeyProvider
where K: IComparable
{
...
}
partial class Dictionary
{
...
}

是正确的,因为这些包含约束的部分有效地指定了类、接口的相同集合,以及相应相同集合的类型参数的构造函数约束。

23.1.4基类

当不完整类声明包含基类说明时,它必须与包含基类说明的所有其他部分一致。如果不完整类声明的任何部分都不包含基类声明,那么基类将是System.Object(§10.1.2.1)。

95Shop仿醉品商城
95Shop仿醉品商城

95Shop可以免费下载使用,是一款仿醉品商城网店系统,内置SEO优化,具有模块丰富、管理简洁直观,操作易用等特点,系统功能完整,运行速度较快,采用ASP.NET(C#)技术开发,配合SQL Serve2000数据库存储数据,运行环境为微软ASP.NET 2.0。95Shop官方网站定期开发新功能和维护升级。可以放心使用! 安装运行方法 1、下载软件压缩包; 2、将下载的软件压缩包解压缩,得到we

下载

23.1.5基接口

在多个部分中声明的类型的基接口集合,是在各个部分中指定的基接口的联合。一个特定的基接口在每个部分中只能被命名一次,但可以在多个部分中命名相同的基接口。但对于任何给出的基接口成员只能有唯一的实现。
在例子

partial class C: IA, IB {...}
partial class C: IC {...}
partial class C: IA, IB {...}
中类C的基接口是IA,IB和IC。

通常,在接口声明的部分中提供接口的实现;但这不是必需的。一个部分可以为声明在另一个部分中的接口提供实现。

partial class X
{
int IComparable.CompareTo(object o) {...}
}
partial class X: IComparable
{
...
}

23.1.6成员

声明在多个部分中的类型的成员只是在各个部分中声明的成员的联合。类型声明的所有部分的内容共享相同的声明空间(§3.3),并且每个成员(§3.7)的作用域扩展到所有部分的内容。任何成员的所有可访问域总是包含封闭类型的所有部分;在一个部分中声明的private成员可以随意的在另一个部分访问。在一个类型的多个部分中声明相同的成员将造成编译时错误,除非该成员是一个带有partial修饰符的成员。

partial class A
{
int x; // 错误, 不能多次声明x
partial class Inner // Ok, Inner 是不完整类型
{
int y;
}
}
partial class A
{
int x; // 错误,不能多次声明x
partial class Inner // Ok, Inner是不完整类型
{
int z;
}
}

尽管一个类型中成员的次序对于C#代码并不是太重要,但在面对其他语言和环境时却可能是很重要的。在这样的情况下,在多个部分中声明的类型内成员次序将是未定义的。

23.2名字绑定

虽然可扩展类型的每个部分必须声明在相同的命名空间,但这些部分也可以写在不同的命名空间中。为此,对于各个部分可以使用不同的using指令(§9.3)。当在一个部分中解释简单名字(§7.5.2)时,只有包含该部分的命名空间using 指令被考虑。这将使得在不同部分的相同标识符表示不同的意义。

namespace N
{
using List = System.Collections.ArrayList;
partial class A
{
List x; // x具有类型 System.Collections.ArrayList
}
}
namespace N
{
using List = Widgets.LinkedList;
partial class A
{
List y; // y 具有类型 Widgets.LinkedList
}
}

以上就是C# 2.0 Specification (四)的内容,更多相关内容请关注PHP中文网(www.php.cn)!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

12

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

4

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

18

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

19

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 8万人学习

C 教程
C 教程

共75课时 | 4.3万人学习

C++教程
C++教程

共115课时 | 14.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号