C#の構造(構造体)
C#では、構造は、データ構造の値型です。 これは、単一の変数は、データの様々なタイプに関連するデータを格納することができる可能にします。構造体キーワード構造を作成するために使用されます。
構造であり、使用済みに表すAレコード。 あなたは動的ライブラリの本を追跡するとします。 あなた5月たいキープトラックの各書籍の次の属性:
- タイトル
- 著者
- テーマ
- 書籍ID
定義構造
定義A構造、あなた必見使用A構造体ステートメント。 構造計算書は、新しいデータ型のいくつかのメンバーと手順を定義します。
たとえば、ブックの構造を宣言し、次のように従うことができます。
構造体洋書 { 公共の文字列タイトル。 公共の文字列の作者。 パブリック文字列対象。 公共int型book_id。 };
次のプログラムは、構造体の使用方法を示しています。
システムを用いました。 構造体洋書 { 公共の文字列のタイトル。 パブリック文字列著者。 パブリック文字列対象。 公共int型book_id。 }; パブリッククラスtestStructure { 公共の静的な無効メイン(文字列[] argsを) { 本BOOK1; / *宣言BOOK1、タイプブック* / ブックブック2; / *宣言ブック2、タイプのブック* / / *ブック1ディテール* / Book1.title = "Cプログラミング」。 Book1.author = "Nuhaアリ」。 Book1.subject = "Cプログラミングチュートリアル"; Book1.book_id = 6495407; / *ブック2(詳細な説明)* / Book2.title = "テレコム課金」。 Book2.author = "ザラアリ」。 Book2.subject = "テレコム課金チュートリアル」。 Book2.book_id = 6495700; / *印刷BOOK1情報* / Console.WriteLineを( "ブック1タイトル:{0}"、Book1.title)。 Console.WriteLineを( "ブック1著者:{0}"、Book1.author)。 Console.WriteLineを( "ブック1件名:{0}"、Book1.subject)。 Console.WriteLineを( "ブック1 book_id:{0}"、Book1.book_id)。 / *印刷ブック2情報* / Console.WriteLineを( "ブック2タイトル:{0}"、Book2.title)。 Console.WriteLineを( "ブック2著者:{0}"、Book2.author)。 Console.WriteLineを( "ブック2件名:{0}"、Book2.subject)。 Console.WriteLineを( "ブック2 book_id:{0}"、Book2.book_id)。 Console.ReadKey()。 } }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
書籍1タイトル:Cプログラミング ブック1著者:Nuhaアリ ブック1主題:Cプログラミングチュートリアル ブック1 book_id:6495407 ブック2タイトル:テレコム課金 ブック2著者:ザラアリ ブック2件名:テレコム課金チュートリアル ブック2 book_id:6495700
C#の構造的特徴
あなたはブックと呼ばれる単純な構造を使用しています。 C#と異なる構造でCまたはC + +の伝統的な構造で。 構造特性のC#の:
- 構造は、メソッド、フィールド、インデックス、プロパティ、演算子、メソッド、およびイベントを有することができます。
- 構造缶BE定義のコンストラクタが、することはできません定義Aデストラクタ。 ただし、デフォルトコンストラクタの構造を定義することはできません。 ザ・デフォルトコンストラクタです自動的に定義され、缶はないが変更されました。
- クラスとは異なり、構造が他の構造やクラスから継承することはできません。
- 他の構造または構造ではないクラスのインフラとして。
- 構造は、1つまたは複数のインターフェイスを実装することができます。
- 構造部材缶はないが指定されインクルード抽象的、仮想、または保護されました。
- あなたは、オブジェクトの構造を作成するには、New演算子を使用する場合は、構造体を作成するために、適切なコンストラクタを呼び出します。 クラスとは異なり、構造がNew演算子を使用することはできませんがインスタンス化します。
- あなたはフィールドのみ割り当てがあった後にすべてのフィールドが初期化されている場合のみ、新しい演算子を使用しない場合、オブジェクトが使用することだけでした。
構造対クラス
クラスと構造体は、以下の基本的な違いがあります。
- クラスは、構造体が値型で、参照型です。
- 構造は継承をサポートしていません。
- 構造は、デフォルトコンストラクタを宣言することはできません。
上記の議論については、のは、前の例を書き直してみましょう:
システムを用いました。 構造体洋書 { プライベート文字列のタイトル。 プライベート文字列著者; プライベート文字列対象。 プライベートint型book_id。 公共無効にgetValues(文字列トン、列A、列s、int型のID) { タイトル=トン。 著者= A; 対象=秒; book_id = ID; } 公共ボイドディスプレイ() { Console.WriteLineを( "タイトル:{0}"、タイトル)。 Console.WriteLineを( "著者:{0}"、作者)。 Console.WriteLineを( "件名:{0}"、件名)。 Console.WriteLineを( "Book_id:{0}"、book_id)。 } }; パブリッククラスtestStructure { 公共の静的な無効メイン(文字列[] argsを) { 洋書BOOK1 =新しい書籍(); / *宣言BOOK1、タイプブック* / ブックブック2 =新しい書籍(); / *宣言ブック2、タイプブック* / / *ブック1ディテール* / Book1.getValues(「Cプログラミング」、 「Nuhaアリ」、「Cプログラミングチュートリアル "、6495407); / *ブック2(詳細な説明)* / Book2.getValues(「テレコム課金」、 「ザラアリ」、「テレコム課金チュートリアル」、6495700); / *印刷BOOK1情報* / Book1.display()。 / *印刷ブック2情報* / Book2.display()。 Console.ReadKey()。 } }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
タイトル:Cプログラミング 著者:Nuhaアリ 件名:Cプログラミングチュートリアル Book_id:6495407 タイトル:テレコム課金 著者:ザラアリ 件名:テレコム課金チュートリアル Book_id:6495700