この記事は次から転送されます:https : //www.cnblogs.com/yubinfeng/p/4552717.html
上記で定義されたPersonのクラスには、フィールド、属性、メソッド、イベントなどのメンバーが含まれます。さらに、上記のネストされたクラスもクラスのメンバーです。
a。クラスのメンバーは、静的メンバー(静的)と非静的メンバーに分けられます。
b。静的メンバーは静的でマークされ、マークされていない場合、デフォルトは非静的メンバーです
c。静的メンバーはクラスに属し、動的メンバーはインスタンス、つまりオブジェクトに属します
d。静的メンバーは、クラスのすべてのインスタンスで共有されます。クラスのインスタンスまたはコピーの数に関係なく、静的メンバーはストレージ内の領域のみを占有します。非静的メンバーは、クラスの各インスタンスにメモリドメインを作成します。
以下では、主にクラスのメインメンバーについて説明します:フィールド、属性、メソッド
1. class-fieldのメンバー
フィールド宣言:(静的/読み取り専用)<タイプ> <変数名>
a。通常はプライベートであるクラスのプライベート変数として理解できます。
b。フィールドの定義は通常、小文字または "_"で始まります。
c。フィールド宣言修飾子には、静的(静的)と読み取り専用(読み取り専用)の2つのタイプがあります。
通常、dフィールドはプライベートなので、アクセス修飾子は通常必要ありません。
例:
1静的int eyesCount = 2; 2 readonly int earsCount = 2;
2. class-propertiesのメンバー
a。クラスのパブリック変数として理解でき、通常はすべてパブリック(パブリック)
b。属性には、getとsetの2つのメソッドがあります。
c.getアクセサーは、属性宣言型と同じデータを返します。つまり、呼び出されると、内部フィールドの値または参照を取得できます。
d.setアクセサは、設定されたパラメータを表示しません。暗黙的なパラメータ値があります。その機能は、呼び出されたときに、プロパティの内部フィールドまたは参照に値を割り当てることです。
e。クラスのメンバーはデフォルトでプライベートであるため、属性はパブリックであるため、オブジェクト指向の開発プロセスでは、パブリックとして修飾子を使用して属性を宣言する必要があります。
f。属性はgetまたはsetアクセサーを無視できますが、両方は無視できません。
例:
1 string _country; 2 //読み取り/書き込み属性 3 public string Country 4 { 5 set {_country = value;} 6 get {return _country;} 7} 8 //読み取り専用属性 9 public string CountryOnleread 10 { 11 get {return _country ;} 12} 13 //属性のみを書き込みます 14公開文字列Countryonlywrite 15 { 16 set {_country = value;} 17}
6.クラスメソッドのメンバー(メソッド)
宣言:(アクセス修飾子)<タイプ> <メソッド名> {メソッド本体}
呼び出し:[<クラス名。>] | [<インスタンスオブジェクト名。>] <メソッド名>([<実パラメータリスト>])
定義:は、計算やその他の動作を実行するために使用されるクラスのメンバーです
静的メソッド:
メソッドはインスタンスメソッドと静的メソッドに分かれます(前述のクラスのメンバーと同じ)
静的メソッドでは静的フィールドのみを呼び出すことができ、非静的フィールドは許可されません
メソッドパラメータ:
値パラメーター:修飾子なし。メソッドの仮パラメータは、実パラメータのコピーです。仮パラメータを変更しても、メモリ内の実パラメータの値には影響しません。実パラメータは安全です。
参照パラメーター:ref修飾子を使用して宣言します。
refキーワードを使用すると、パラメーターが参照によって渡されます。その結果、呼び出し側のメソッドに制御が渡されると、メソッドのパラメーターに加えられた変更が変数に反映されます。
refパラメーターを使用するには、メソッド定義と呼び出しメソッドの両方でrefキーワードを明示的に使用する必要があります。
refパラメーターに渡されるパラメーターは、最初に初期化する必要があります。これは、outとは異なり、outのパラメーターを渡す前に明示的に初期化する必要はありません。
属性は変数ではないため、refパラメーターとして渡すことはできません。
refとoutは実行時に異なる方法で処理されますが、コンパイル時には同じように扱われます。したがって、一方のメソッドがrefパラメーターを取り、もう一方のメソッドがoutパラメーターを受け取る場合、これらの2つのメソッドをオーバーロードすることはできません。たとえば、コンパイルの観点から、次のコードの2つのメソッドは同じです。これを行おうとすると、コードはコンパイルされません。
1つのメソッドがrefまたはoutパラメーターを受け取り、他のメソッドがこれら2つのタイプのパラメーターを取り込めない場合、オーバーロードされる可能性があります。
コード例:
// double [] numbers = new double [] { 1、2、3、5.5 }を呼び出す; double i = 0; MyAddOperation(numbers、ref i); Console.WriteLine( "計算結果の2倍:{0} "、i * 2); Console.ReadLine(); //参照パラメーターメソッドの宣言 public static void MyAddOperation(double [] numbers、ref double result) { result = 0; foreach(double num in numbers) result + = num; Console.WriteLine( "計算結果:{0}"、result); }
出力パラメーター:out修飾子を使用して宣言されます。refと同様に、実際のパラメーターを直接操作します。outキーワードは、メソッド宣言とメソッド呼び出しの両方で明示的に指定する必要があります。outパラメータ宣言メソッドは、その意味が出力目的でのみ使用されるため、メソッドに渡される前に変数を初期化する必要はありません。ただし、メソッドが戻る前に、outパラメータを割り当てる必要があります。
outキーワードを使用すると、パラメーターが参照によって渡されます。これはrefキーワードに似ています。
refとの違い: refでは、変数を渡す前に初期化する必要があります。
出力パラメーターとして渡される変数は、渡される前に初期化する必要はありませんが、メソッドが戻る前に、メソッドを呼び出して値を割り当てる必要があります。
例:
1 // Call 2 double [] numbers = new double [] { 1、2、3、5.5 }; 3 double i = 0; 4 MyAddOperation(numbers、out i); 5 Console.WriteLine( "計算結果の2倍はい:{0} "、i * 2); 6 Console.ReadLine(); 7 8 //出力パラメーターメソッド宣言 9 public static void MyAddOperation(double []数値、二重の結果を出力) 10 { 11結果= 0; 12 foreach(数値の2桁の数字) 13結果+ = num; 14 Console.WriteLine( "計算結果は{0}"、result); 15}
配列パラメーター:params修飾子を使用して宣言されます。paramsキーワードは、可変長パラメーターリストを宣言するために使用されます。メソッド宣言に含めることができるparamsパラメータは1つだけです。paramsパラメータは、パラメータの数が可変である場合に非常に役立ちます。次の例を参照してください。
1 //メソッドを呼び出す 2 double [] numbers = new double [] { 1、2、3、5.5 }; 3 Console.WriteLine( "計算結果は{0}"、MyAddOperation(numbers)); 4 5 //配列型パラメーターの宣言 6 public static double MyAddOperation(params double [] numbers) 7 { 8 double result = 0; 9 foreach(double num in numbers) 10 result + = num; 11 return result; 12}
仮想メソッド(仮想メソッド)
virtualキーワードは、基本クラスのメソッドを変更するために使用されます。仮想の使用には2つの状況があります。
ケース1:仮想メソッドは基本クラスで定義されていますが、仮想メソッドは派生クラスでオーバーライドされていません。次に、派生クラスインスタンスの呼び出しで、仮想メソッドは基本クラスで定義されたメソッドを使用します。
ケース2:仮想メソッドが基本クラスで定義され、オーバーライドを使用して派生クラスでオーバーライドされます。次に、派生クラスのインスタンスの呼び出しで、仮想メソッドは派生オーバーライドメソッドを使用します。
抽象メソッド(抽象メソッド)
abstractキーワードは、抽象クラスのメソッドを変更するためにのみ使用でき、特定の実装はありません。抽象メソッドの実装は、派生クラスのoverrideキーワードを使用して実装する必要があります。
(抽象クラスについては後で詳しく説明します)
重要なポイント:
1.静的メソッドで呼び出すことができるのは静的フィールドのみで、非静的フィールドは許可されていません
2.戻り値のないメソッド、タイプvoid