20.ネイティブ・クラス
非ネスト・ネイティブ・クラスのアクセス可能性はオプション的に上層型認識(
§12.4)を通して指定できます。
ネイティブ・クラスはオプション的にクラス修飾子(
§19.1.1)を持つことができます。
ネイティブ・クラスは非シンプル値クラス、refクラス、または、インターフェイス・クラスをメンバとして含むことはできません。
[注意:そのような型をメンバとして許すことは、混合型(
§23)を親型とすることになるでしょう。]
ネイティブ・クラスはネストしたrefクラス、値クラス、そして、インターフェイス・クラス定義を含むことができます。
ネイティブ・クラスはジェネリック・クラスになるべきではありません。
メタデータの詳細は
§34.8 を参照のこと。
20.1 関数
ネイティブ・クラス中の仮想メンバ関数は次の宣言を含むことができます。
- function-modifier(関数修飾子) sealed(§19.4.2)
- function-modifier(関数修飾子) abstract(§19.4.3)
ネイティブ・クラス中のメンバ関数はオプションとして
parameter-array(パラメータ配列)(
§18.4)を
parameter-declaration-clause(パラメータ宣言項)に持つことができます。
ネイティブ・クラスのメンバ関数はジェネリック(
§31.3)になることができます。
[注意:ネイティブ・クラスのメンバ関数は hidebyname 名前検索(
§10.7)を利用します。]
20.2 プロパティ
ネイティブ・クラス中にプロパティが含まれているプログラムは不正です。
20.3 静的演算子
静的演算子をネイティブ・クラスに含むプログラムは不正です。
20.4 デリゲート型
delegate-specifier(
§27.1)やデリゲート型を持つフィールドがネイティブ・クラスに含まれているプログラムは不正です。
20.5 フレンド
ネイティブ・クラスは他のクラスや関数をフレンドとして宣言できるただ一つのクラスです。CLI クラス型はフレンド宣言できないですが、CLI クラス型はネイティブ・クラスのフレンドになることができます。
ジェネリック関数、ジェネリックCLIクラス型、そして、CLI クラス・テンプレートは全てフレンドになることができます。
フレンド宣言はそれが定義される前にフレンドであるとエンティティを宣言することができます。
[例:次のようなコードでは、
class N {
generic<class T>
friend ref class R;
/* ... */
};
generic<class T>
ref struct R {
/* ... */
};
ジェネリックref型クラス R は R が定義される前にネイティブ・クラス N のフレンドとして宣言されています。R の実装は N へのアクセスにフレンド関係を持っています。]
20.6 イベント
ネイティブ・クラス中にイベントを含むプログラムは不正です。
20.7 ファイナライザ
ネイティブ・クラス中にファイナライザを含むプログラムは不正です。
20.8 initonly フィールド と リテラル・フィールド
ネイティブ・クラス中に initonly フィールド、ないし、リテラル・フィールドを含むプログラムは不正です。
20.9 静的コンストラクタ
ネイティブ・クラス中に静的コンストラクタを含むプログラムは不正です。