搜索
首页后端开发C#.Net教程C# 2.0 Specification (四)

C# 2.0 Specification (四)

Jan 03, 2017 am 10:19 AM

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

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<K,V>
where K: IComparable<K>
where V: IKeyProvider<K>, IPersistable
{
...
}
partial class Dictionary<K,V>
where V: IPersistable, IKeyProvider<K>
where K: IComparable<K>
{
...
}
partial class Dictionary<K,V>
{
...
}

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

23.1.4基类

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

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

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
将C#.NET应用程序部署到Azure/AWS:逐步指南将C#.NET应用程序部署到Azure/AWS:逐步指南Apr 23, 2025 am 12:06 AM

如何将C#.NET应用部署到Azure或AWS?答案是使用AzureAppService和AWSElasticBeanstalk。1.在Azure上,使用AzureAppService和AzurePipelines自动化部署。2.在AWS上,使用AmazonElasticBeanstalk和AWSLambda实现部署和无服务器计算。

C#.NET:强大的编程语言简介C#.NET:强大的编程语言简介Apr 22, 2025 am 12:04 AM

C#和.NET的结合为开发者提供了强大的编程环境。1)C#支持多态性和异步编程,2).NET提供跨平台能力和并发处理机制,这使得它们在桌面、Web和移动应用开发中广泛应用。

.NET框架与C#:解码术语.NET框架与C#:解码术语Apr 21, 2025 am 12:05 AM

.NETFramework是一个软件框架,C#是一种编程语言。1..NETFramework提供库和服务,支持桌面、Web和移动应用开发。2.C#设计用于.NETFramework,支持现代编程功能。3..NETFramework通过CLR管理代码执行,C#代码编译成IL后由CLR运行。4.使用.NETFramework可快速开发应用,C#提供如LINQ的高级功能。5.常见错误包括类型转换和异步编程死锁,调试需用VisualStudio工具。

揭开c#.net的神秘面纱:初学者的概述揭开c#.net的神秘面纱:初学者的概述Apr 20, 2025 am 12:11 AM

C#是一种由微软开发的现代、面向对象的编程语言,.NET是微软提供的开发框架。C#结合了C 的性能和Java的简洁性,适用于构建各种应用程序。.NET框架支持多种语言,提供垃圾回收机制,简化内存管理。

C#和.NET运行时:它们如何一起工作C#和.NET运行时:它们如何一起工作Apr 19, 2025 am 12:04 AM

C#和.NET运行时紧密合作,赋予开发者高效、强大且跨平台的开发能力。1)C#是一种类型安全且面向对象的编程语言,旨在与.NET框架无缝集成。2).NET运行时管理C#代码的执行,提供垃圾回收、类型安全等服务,确保高效和跨平台运行。

C#.NET开发:入门的初学者指南C#.NET开发:入门的初学者指南Apr 18, 2025 am 12:17 AM

要开始C#.NET开发,你需要:1.了解C#的基础知识和.NET框架的核心概念;2.掌握变量、数据类型、控制结构、函数和类的基本概念;3.学习C#的高级特性,如LINQ和异步编程;4.熟悉常见错误的调试技巧和性能优化方法。通过这些步骤,你可以逐步深入C#.NET的世界,并编写高效的应用程序。

c#和.net:了解两者之间的关系c#和.net:了解两者之间的关系Apr 17, 2025 am 12:07 AM

C#和.NET的关系是密不可分的,但它们不是一回事。C#是一门编程语言,而.NET是一个开发平台。C#用于编写代码,编译成.NET的中间语言(IL),由.NET运行时(CLR)执行。

c#.net的持续相关性:查看当前用法c#.net的持续相关性:查看当前用法Apr 16, 2025 am 12:07 AM

C#.NET依然重要,因为它提供了强大的工具和库,支持多种应用开发。1)C#结合.NET框架,使开发高效便捷。2)C#的类型安全和垃圾回收机制增强了其优势。3).NET提供跨平台运行环境和丰富的API,提升了开发灵活性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)