次の方法で共有


型定義

更新 : 2007 年 11 月

新しい型は、既存の型から定義します。組み込みの値型、ポインタ、配列、およびデリゲートは、使用時に定義され、暗黙の型として参照されます。型は入れ子にすることもできます。つまり、ある型を別の型のメンバにすることができます。

型定義には次の内容を含めます。

  • 型に対して定義される属性

  • 型の参照可能範囲

  • 型の名前

  • 型の基本型

  • 型が実装するインターフェイス

  • 型の各メンバの定義

属性

属性を使用して、ユーザー定義のメタデータを追加できます。属性は、型、プロパティ、メソッドなど、言語のほとんどの要素に適用できます。

型のアクセシビリティ

すべての型には、他の型からのアクセシビリティを制御するアクセシビリティ修飾子があります。ランタイムによってサポートされる型のアクセシビリティについて次の表で説明します。

ユーザー補助

説明

public

すべてのアセンブリから型にアクセスできます。

assembly

同じアセンブリ内からだけ型にアクセスできます。

入れ子にされた型のアクセシビリティは、その型のアクセシビリティ ドメインによって決まります。このアクセシビリティ ドメインは、そのメンバに対して宣言されているアクセシビリティと、そのメンバの直接のコンテナである型のアクセシビリティ ドメインの両方によって決定されます。ただし、入れ子にされた型のアクセシビリティ ドメインが、その型を含んでいる型のアクセシビリティ ドメインを上回ることはできません。

プログラム P 内の型 T で宣言された、入れ子にされたメンバ M のアクセシビリティ ドメインは、次のように定義されます。M 自体も型である可能性があります。

  • M に対して宣言されたアクセシビリティが public の場合、M のアクセシビリティ ドメインは T のアクセシビリティ ドメインになります。

  • M に対して宣言されているアクセシビリティが protected internal の場合、M のアクセシビリティ ドメインは、T のアクセシビリティ ドメインと、P のプログラム テキストおよび P の外側で宣言された T から派生した任意の型のプログラム テキストとの積集合になります。

  • M に対して宣言されているアクセシビリティが protected の場合、M のアクセシビリティ ドメインは、T のアクセシビリティ ドメインと、T のプログラム テキストおよび T から派生した任意の型との積集合になります。

  • M に対して宣言されているアクセシビリティが internal の場合、M のアクセシビリティ ドメインは、T のアクセシビリティ ドメインと P のプログラム テキストとの積集合になります。

  • M に対して宣言されているアクセシビリティが private の場合、M のアクセシビリティ ドメインは T のプログラム テキストになります。

型名

共通型システムでは、名前に関して適用される制限は次の 2 つだけです。

  1. すべての名前は Unicode (16 ビット) 文字列としてエンコードされます。

  2. 名前には、値 0x0000 (16 ビット) を埋め込むことはできません。

すべての比較はバイト単位で行われ、大文字と小文字が区別され、ロケールに依存しません。

型は、他のモジュールおよびアセンブリの型を参照する場合もありますが、1 つのモジュール内で完全に定義されます。型名は 1 つのアセンブリ内で一意にする必要があります。型を完全に識別するためには、その型の実装を含んでいるアセンブリ名によって、その型名を限定する必要があります。詳細については、「完全修飾型名の指定」を参照してください。

基本型とインターフェイス

型は、別の型から値と動作を継承できます。共通型システムでは、複数の基本型から継承する型を作成することはできません。

型は任意の数のインターフェイスを実装できます。型にインターフェイスを実装するには、そのインターフェイスのすべての仮想メンバをその型に実装する必要があります。仮想メソッドは派生型によって実装でき、静的または動的に呼び出すことができます。仮想メンバの詳細については、「型のメンバ」を参照してください。継承とインターフェイスの詳細については、「クラス」および「インターフェイス」を参照してください。

型のメンバ

型の動作と状態は、その型のイベント、フィールド、入れ子にされた型、メソッド、プロパティなどのメンバによって定義されます。詳細については、「型のメンバ」を参照してください。

参照

概念

型のメンバ

その他の技術情報

共通型システム

共通言語ランタイムのアセンブリ

属性を使用したメタデータの拡張