ホームページ  >  記事  >  バックエンド開発  >  C# の構造とクラス

C# の構造とクラス

高洛峰
高洛峰オリジナル
2017-02-08 14:39:061140ブラウズ

クラスと構造体は、.NET Framework の同じ型システムの 2 つの基本的な構成要素です。どちらも本質的には、一連のデータと動作を論理単位としてカプセル化するデータ構造です。データと動作はクラスまたは構造体の「メンバー」であり、独自のメソッド、プロパティ、イベントなどが含まれています。

構造体

構造体は、C# プログラマーが独自の値の型を定義するために使用する最も一般的なメカニズムです。構造体はメソッド、フィールド、演算子、アクセス制御などを提供するため、列挙型よりも強力です。

構造体はクラスに非常に似ており、どちらもデータ メンバーと関数メンバーを含めることができるデータ構造を表します。ただし、クラスとは異なり、構造体は値型であり、ヒープ割り当てを必要としません。構造体型の変数には構造体のデータが直接含まれますが、クラス型の変数には対応するデータへの参照のみが含まれます (参照されるデータは「オブジェクト」と呼ばれます)。

構造体は、値セマンティクスを持つ小さなデータ構造に特に役立ちます。複素数、座標系の点、または辞書のキーと値のペアはすべて、構造の典型的な例です。これらのデータ構造の重要な点は、データ メンバーの数が少なく、継承や参照識別子の使用が不要で、使いやすいことです (代入する場合、参照をコピーするのではなく、値を直接コピーします)。 )。明声構造体のステートメントはキーワード Struct によって実装され、ステートメントの形式は次のとおりです:

修飾子 Struct 構造名 {

構造主語}}; オプションの構造修飾子をグループ化し、その後にキーワード struct と使用される識別子を続けます。構造体に名前を付け、次にオプションの構造体インターフェース仕様、最後に構造体本体を入力し、必要に応じてセミコロンを続けます。必要に応じて、構造体宣言に構造修飾子を含めることができます: NEW、PUBLIC、Protect、Internet、Private

構造体

構造体定義 (パラメーターなし) コンストラクターの構造体定義の構造が間違っています。インスタンス フィールドの初期化が間違っています。それも間違っています。構造体のメンバーの初期化は 2 つの方法で行うことができます。1 つはパラメーター化されたコンストラクターを使用する方法、もう 1 つは構造体の宣言後にメンバーに個別にアクセスする方法です。プライベート メンバー、または他の方法でアクセスできなくなるメンバーは、コンストラクターでのみ初期化できます。算 NEW 計算シンボルを使用して構造体オブジェクトを作成する場合は、構造体オブジェクトを作成し、適切な構造体関数を呼び出します。クラスとは異なり、構造体は new 演算子を使用せずにインスタンス化できます。この場合、コンストラクターの呼び出しがないため、割り当て効率が向上します。ただし、フィールドは未割り当てのままであり、すべてのフィールドが初期化されるまでオブジェクトは使用できません。

構造体に参照型がメンバーとして含まれている場合、そのメンバーを呼び出すデフォルトのコンストラクターを明示的に呼び出す必要があります。そうしないと、メンバーは割り当てられないままになり、構造体は使用できなくなります。

質問例、構造体の作成と構造体の使用分析

クラス

クラスは、データメンバー (定数とフィールド)、関数メンバー (メソッド、プロパティ、イベント、インデクサー、演算子、インスタンス コンストラクター、静的コンストラクターおよびデストラクター)、およびその他のクラス (ネストされた型)。クラスはオブジェクトを作成するためのテンプレートです。 C# のすべての型はクラスであり、すべてのステートメントはクラス内に配置する必要があります。クラスの外にステートメントはありません。したがって、クラスは C# 言語の中核となる基本的な構成要素です。クラス型は、派生クラスが基本クラスを拡張および特殊化できるメカニズムである継承をサポートしています。

クラス宣言で指定される基本クラスは、構築されたクラス型にすることができます。基本クラス自体を型パラメーターにすることはできませんが、そのスコープ内に型パラメーターを含めることはできます。 , OOP メソッドでは、クラスは現実世界を高度に抽象化し、一般化したものですが、オブジェクトはクラスの共通の特性と動作規則を持たなければなりません。クラス。これは現実の生活と同じであり、これが OOP 手法が強力な生命力を持ち、より多くのソフトウェア開発者に歓迎され、多くのコンピュータ開発者に支持される理由です。 。

つまり、プログラマの観点から見ると、クラスはデータモデルといくつかのプログラムプロセスであり、それらがカプセル化されて全体を形成します。情報技術を使用して現実世界をシミュレーションおよび抽象化したものです。オブジェクトはクラスのインスタンスです。プログラミング言語の観点からは、オブジェクトはクラスの割り当ての結果として理解できます。オブジェクトとは、OOP メソッドにおいてプログラムを構成するコンポーネントです。
C# 内のクラス内の C#classes は、CLASS キーワードのインスタンスです。形式は次のとおりです。

Class クラスの推論: Base またはインターフェイス {

{

}

"Decision", ": Base": Base ": Base クラスまたはインターフェイス" はオプションです。クラスの修飾子は、次のいずれか、またはそれらの組み合わせになります (クラス宣言 () 内で同じ修飾子を複数回使用することはできません)。 cusing - ( - - ‐ ‐ - ''(2)

クラスアクセス

の使用を使用して使用して使用して使用する使用を使用します。 using use ' s ' s ‐ ‐ ‐ ‐ ‐ 継承される

プログラムのセキュリティを強化する優れたメカニズム。 C# コンパイラには厳密な型安全性チェック機能があり、プログラム内のほぼすべての構文問題を検出できます。ただし、プログラムがコンパイル チェックに合格したからといって、エラーが存在しなくなったわけではありません。分 C#言語はプログラムエラーの発生を十分に考慮しており、オブジェクトの初期化作業をコンストラクタに、クリアランス作業を構造体関数に置くことでうまく解決されています。オブジェクトが作成されると、コンストラクターが自動的に実行されます。オブジェクトが消滅すると、デストラクターが自動的に実行されます。

コンストラクターの名前は、自動的に実行される前にコンパイラーによって認識される必要があります。その命名方法はシンプルで合理的です。コンストラクターにはクラスと同じ名前を付けます。名前に加えて、コンストラクターのもう 1 つの特徴は、戻り値の型が void である関数とは異なり、戻り値の型を持たないことです。

デストラクターは、クラスのインスタンスの破棄を実装するメソッド メンバーです。デストラクターにはパラメーターや修飾子を含めることはできず、呼び出すこともできません。デストラクターとコンストラクターの目的は異なるため、違いを示すためにデストラクターには「~」という接頭辞が付けられています。

コンストラクターとデストラクターは、形式的にはクラス内のより単純な関数ですが。ただし、その使用法は見かけほど簡単ではないため、コンストラクターとデストラクターを柔軟かつ正確に使用すると、ユーザーが CLR のメモリ管理メカニズムをより深く理解し、システム内のリソースをより適切に管理できるようになります。

(2)、クラスとオブジェクト

クラスは、同じプロパティとサービスを持つオブジェクトのコレクションです。これは、このクラスに属するすべてのオブジェクトに対して統一された抽象的な説明を提供します。これには、プロパティとサービスという 2 つの主要な部分が含まれます。オブジェクト指向プログラミング言語では、クラスはクラス名を持つ独立したプログラム単位であり、クラス名には属性の説明とサービスの説明という 2 つの主要な部分が含まれます。


オブジェクトとは、システム内で客観的な物事を記述するために使用される実体であり、システムを構成する基本単位です。オブジェクトは、プロパティのセットと、プロパティのセットに対して動作するサービスのセットで構成されます。より抽象的な観点から見ると、オブジェクトは問題ドメインまたは実装ドメイン内の何かを抽象化したもので、保存する必要がある情報と、そのオブジェクトがシステム内で果たす役割を反映した属性と権利のセットです。これらの属性に対して操作を実行する、動作するサービスのセットのラッパー。客観的な世界は、オブジェクトとオブジェクト間の接続で構成されます。

クラスとオブジェクトの関係は、型と鋳造の関係に似ています。クラスをインスタンス化した結果がオブジェクトです。オブジェクトのタイプを抽象化したものがクラスです。クラスは、同じ特性 (プロパティ) と同じ動作 (メソッド) を持つオブジェクトのグループを記述します。

C# の構造とクラスに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。