C#中級チュートリアル-継承

継承を実現するには:

タイプが基本タイプから派生し、基本タイプのすべてのメンバーフィールドと関数を持っていることを示します。
実装継承では、派生型の定義で特定の関数の実装コードが指定されていない限り、派生型は基本型の各関数の実装コードを採用します。
このタイプの継承は、既存のタイプに機能を追加する必要がある場合、または多くの関連するタイプが重要な共通機能のセットを共有する場合に非常に役立ちます。

インターフェイスの継承:

表示一个类型只继承了函数的签名,没有继承任何实现代码。 在需要指定该类型具有某些可用的特性时,最好使用这种类型的继承。

例:
別のクラスから派生したクラスを宣言する場合は、次の構文を使用できます
。classMyDerivedClass:MyBaseclass
{ //ここの関数とデータメンバー}

多重継承:(インターフェース)

一部の言語(C ++)は、いわゆる「多重継承」をサポートしています。つまり、クラスは複数のクラスから派生しています。多重継承を使用する利点については議論の余地があります。一方で、多重継承を使用して非常に複雑で非常にコンパクトなコードを記述できることは間違いありません。一方、複数の実装継承を使用するコードは、理解とデバッグが難しいことがよくあります。前述のように、堅牢なコードの記述を簡素化することは、C#を開発するための重要な設計目標です。したがって、C#は複数の実装の継承をサポートしていません。
また、C#では、複数のインターフェイス(複数のインターフェイスの継承)から型を派生させることができます。これは、C#クラスが別のクラスおよび任意の数のインターフェイスから派生できることを示しています。より正確には、System.Objectはパブリック基本クラスであるため、すべてのC#(Objectクラスを除く)には基本クラスがあり、任意の数の基本インターフェイスを持つことができます。

例:
クラス(または構造)もインターフェイスから派生している場合は、リスト内の基本クラスとインターフェイスをコンマで区切ります
。publicclass MyDerivedClass:MyBaseClass、IInterface1、IInterface2
{ //など}

相続に関連する方法

仮想方式

基本クラス関数を仮想として宣言すると、任意の派生クラスで関数を書き換えることができます
。classMyBaseClass { public virtual string VirtualMethod(){ return“メソッドは基本クラスで呼び出されます”; } }派生クラスで書き換えます。関数の場合、 overrideキーワードを使用して、クラスMyDerivedClassを明示的に宣言します。MyBaseClass{ public override string VirtualMethod(){ return“メソッドはderivedclassで呼び出されます。”; } }サブクラスの仮想関数を書き換えた、呼び出された場所に関係なく、書き換えを呼び出す方法










Hideメソッド

同じ署名を持つメソッドが基本クラスと派生クラスの両方で宣言されているが、メソッドがそれぞれ仮想クラスとオーバーライドとして宣言されていない場合、派生クラスは基本クラスメソッドを非表示にします。(新しいキーワードを使用して宣言します)
基本クラス
クラスMyBaseClass { public int MyMethod(){ } }派生クラス(基本クラスと同じ名前のメソッドは派生クラスに非表示になります)class MyDerivedClass:MyBaseClass { public new void MyMethod(){ } }派生クラスのメソッドが呼び出された後、新しいフィールドのMyMethodが使用され、継承する基本クラスと同じ名前のメソッドは非表示になり、呼び出されません。








新しいフィールドが使用されない場合、同じ名前のサブクラスと基本クラスのメソッドは引き続き新しいフィールドを使用します。つまり、サブクラスが呼び出され、デフォルトでnewが使用されます(VSはエラー、プロンプトが表示されます)

ここに画像の説明を挿入


thisおよびbaseキーワードthisは、現在のクラスで定義されているフィールド、プロパティ、およびメソッドにアクセスできます。これの有無にかかわらずアクセスできます。これがある場合、IDE-VSコンパイラはプロンプトを表示できます。
これは、メソッドパラメータがフィールドと同じ名前この時点で、これを使用して、クラス、
ベースのフィールドにアクセスしていることを示します。親クラスのパブリックメソッドとフィールドを呼び出すことができます。ベースの有無にかかわらずアクセスできますが、 base.IEDツールはプロンプトを表示し、すべてを呼び出すことができます。フィールドとメソッドは選択を容易にするためにリストされています

継承に関連するクラス

抽象クラス

C#では、クラスと関数を抽象として宣言できます。抽象クラスはインスタンス化できません。抽象クラスには通常の関数と抽象関数を含めることができます。抽象関数は関数本体のない関数定義にすぎません。明らかに、抽象関数自体も仮想仮想です(関数定義のみで、関数本体の実装はありません)。
クラスはテンプレートであるため、抽象クラスは不完全なテンプレートです。不完全なテンプレートを使用してオブジェクトを作成することはできません。
抽象クラスBuilding { public abstract decimalCalculateHeatingCost(); }

シーリングクラスとシーリング方法

C#を使用すると、クラスとメソッドを封印済みとして宣言できます。
クラスの場合、これはクラスを継承できないことを意味します。
メソッドの場合、これはメソッドをオーバーライドできないことを意味します。
封印されたFinalClass
{ //など}

派生クラスのコンストラクタ

1.サブクラス内の親クラス(パラメーターなし)のデフォルトコンストラクターを呼び出します(親クラスが最初に呼び出され、次にサブクラスが呼び出されます)
public class MyDerivedClass { public MyDerivedClass():base(){ //何かを行う} }ここで:base()は直接記述できません。これは、親クラスのデフォルトのコンストラクター2がデフォルトで呼び出され、パラメーターを持つコンストラクターpublic class MyDerivedClass { public MyDerivedClass(s​​tring name):base(name){ // do何か} }










修飾子

修飾子、タイプまたはメンバーを説明するために使用されるキーワード。修飾子は、メソッドの可視性を指定できます。
ここに画像の説明を挿入

修飾子は使用されません。デフォルトはプライベートです。

静的はフィールドまたはメソッドを変更できます。フィールドが変更されると、そのフィールドは静的データであり、静的フィールドまたは静的プロパティと呼ばれます。メソッドが変更されると、静的メソッドまたは静的と呼ばれます。関数
は静的に変更されたメンバーを使用し、クラス名のみを渡すことができますAccess
オブジェクトを作成するとき、オブジェクトには通常のフィールドのみが含まれ、静的フィールドは含まれません。
静的はデータが一意であることを意味します。シングルトンモード(1つのみ)一般的です

インターフェース

インターフェイス(フライング関数)の定義
public interface IFlyHandler { public void Fly(); }インターフェイスの実装public class Type1Enemy:IFlyHandler { }インターフェイスの定義は、抽象クラスの定義と構文的に同じですが、の実装を提供することはできません。インターフェイスの任意のメンバー一般に、インターフェイスには、メソッド、プロパティ、インデクサー、およびイベントの宣言のみを含めることができます。インターフェースはコンストラクターまたはフィールドを持つことができず、インターフェースは演算子のオーバーロードを許可しません。インターフェイス定義でメンバー修飾子を宣言することは許可されていません。インターフェイスメンバーはすべてパブリックです。







派生インターフェース
インターフェースは、クラスの継承と同じ方法で相互に継承できます。publicinterface
A { void Method1(); } public interface B:A { void Method2(); }




おすすめ

転載: blog.csdn.net/euphorias/article/details/104921884