検索

C# 2.0 仕様 (4)

Jan 03, 2017 am 10:19 AM

このセクションは短いので、最初に削除します:)

23 不完全な型

23.1 不完全な型宣言

新しい型修飾子の部分的は、複数の部分で型を定義するために使用されます。既存のプログラムとの互換性を確保するために、この修飾子はキーワードではないという点で他の修飾子 (get や set など) とは異なり、キーワードのクラス、構造体、またはインターフェイスの直前に指定する必要があります。

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 を使用して宣言され、ネストされた型の部分は、包含型の別の部分で宣言されます。

部分修飾子はデリゲート宣言または列挙宣言では使用できません。

23.1 プロパティ

不完全型のプロパティは、その部分のプロパティを不特定の順序で組み合わせることによって決定されます。属性が不完全な型の複数の部分に配置されている場合、それはその型に対して属性を複数回指定することと同じです。たとえば、2 つの部分

[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)。

ネストされた型の 1 つ以上の不完全な宣言に new 修飾子が含まれている場合、ネストされた型が継承されたメンバーを非表示にしても、警告は表示されません。 (§3.7.12)



クラスの 1 つ以上の不完全な宣言に abstract 修飾子が含まれている場合、そのクラスは抽象 (§10.1.1.1) であり、それ以外の場合は非抽象です。



クラスを同時に抽象化とシール化することはできないことに注意してください。


unsafe 修飾子が不完全な型宣言で使用される場合、特定の部分のみが安全でないコンテキストとみなされます [安全でないコンテキスト (§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 基本インターフェース

複数の部分で宣言された型の基本インターフェースのコレクションは、各部分で指定された基本インターフェースの結合です。特定のベース インターフェイスに名前を付けることができるのは各セクションで 1 回だけですが、同じベース インターフェイスに複数のセクションで名前を付けることができます。ただし、特定の基本インターフェイス メンバーに対して実装できる実装は 1 つだけです。
例で

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エコシステム:フレームワーク、ライブラリ、およびツールC#.NETエコシステム:フレームワーク、ライブラリ、およびツールApr 24, 2025 am 12:02 AM

C#.NETエコシステムは、開発者がアプリケーションを効率的に構築できるようにするための豊富なフレームワークとライブラリを提供します。 1.ASP.NETCOREは、高性能Webアプリケーションの構築に使用されます。2.EntityFrameWorkCoreは、データベース操作に使用されます。これらのツールの使用とベストプラクティスを理解することにより、開発者はアプリケーションの品質とパフォーマンスを向上させることができます。

azure/awsへのc#.netアプリケーションの展開:ステップバイステップガイドazure/awsへのc#.netアプリケーションの展開:ステップバイステップガイドApr 23, 2025 am 12:06 AM

c#.netアプリをAzureまたはAWSに展開する方法は?答えは、AzureAppServiceとAwselasticBeanStalkを使用することです。 1。Azureでは、AzureAppServiceとAzurePipelinesを使用して展開を自動化します。 2。AWSでは、Amazon ElasticBeanstalkと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#は、Microsoftが開発した最新のオブジェクト指向プログラミング言語であり、.NETはMicrosoftが提供する開発フレームワークです。 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。LINQや非同期プログラミングなど、C#の高度な機能を学習します。 4.一般的なエラーのためのデバッグテクニックとパフォーマンス最適化方法に精通してください。これらの手順を使用すると、C#.NETの世界に徐々に浸透し、効率的なアプリケーションを書き込むことができます。

C#と.NET:2つの関係を理解し​​ますC#と.NET:2つの関係を理解し​​ますApr 17, 2025 am 12:07 AM

C#と.NETの関係は切り離せませんが、同じものではありません。 C#はプログラミング言語であり、.NETは開発プ​​ラットフォームです。 C#は、コードの書き込み、.NETの中間言語(IL)にコンパイルされ、.NET Runtime(CLR)によって実行されるために使用されます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい