抽象クラスを作成しているのは、一般的に使用されるメソッドをいくつか提供し、具体的すぎるメソッドをいくつか必要とし、一部のメソッドを「拡張」できるようにするためです。コンパイラエラーにぶつかった後、extern、abstract、およびpartialキーワードの違いを誰かが説明できるかどうか疑問に思います。それらはどういう意味で、いつ/どこで使用すればよいですか?
extern はあなたが使いたいものではないでしょう。これは、メソッドが実装されているが、外部で実装されていることを意味します。通常、外部コードに実装されているメソッドを定義する相互運用シナリオで使用されます。
abstract は、一方、メソッドのAPIを定義しているが、実装を提供していないことを意味します。サブクラスは、abstract
とマークされたメソッドまたはプロパティの実装を提供するか、それ自体がabstract
である必要があります。基本クラスを作成し、サブクラスで実装する必要のあるメソッドまたはプロパティがある場合は、abstract
を使用することをお勧めします。
partial クラスとメソッドは単なるコンパイルツールです。複数のファイルを使用してタイプを定義できます。これは主に自動生成されたコードで使用されます(つまり、デザイナーはデザイナーが生成したコードを部分クラスを定義する別のファイルに配置するため、実装の詳細を見なくても不足している部分を「埋める」ことができます)。これは、クラスを定義するために直接使用するものではありません。
extern
メソッドは通常、dll-import(P/Invoke)を介して実装されているため、実装がありますが、表示されません。
partial
メソッドは、生成されたコードに機能を挿入する方法として、主にコード生成で役立ちます。それらはオプションで、プライベートのみであり、残りの半分を提供する場合はのみ存在します。そのため、明確な割り当てを保証するために、戻り値/出力値に関していくつかの制限もあります。実装がない場合、部分メソッドの呼び出しはコンパイラによって完全に省略されます。
abstract
メソッドは、派生型によって実装を提供する必要がある場所です。ランタイムは、実装されていない抽象メソッドがまだある場合はインスタンスを作成できないことを保証するため、実行時にそれらが存在することが保証されます。
Externを使用すると、dll-importを介してメソッドを使用できます。これにより、外部ソースからのメソッドに特別な意味を与えることができます。
部分的:
* PartialメソッドとAbstractメソッドの最も重要な違いは、Partialの実装はオプションですが、Abstractメソッドの実装は必須です*
抽象メソッドは、非抽象派生クラスでの実装を厳密に要求します
抽象メソッドの基本的な使用法は、クラスを使用するために実装する必要があるということです。これらのメソッドは、そのクラスを効率的に活用するのに役立つからです。
Extern: http://msdn.Microsoft.com/en-us/library/e59b22c5%28v=vs.80%29.aspx
抽象(C#リファレンス)修飾子とextern修飾子を一緒に使用して同じメンバーを変更するのはエラーです。 extern修飾子を使用することは、メソッドがC#コードの外部で実装されることを意味し、abstract修飾子を使用することは、メソッド実装がクラスで提供されないことを意味します。
要約: http://msdn.Microsoft.com/en-us/library/sf985hc5%28v=vs.80%29.aspx
クラス宣言でabstract修飾子を使用して、クラスが他のクラスの基本クラスになることのみを目的としていることを示します。抽象としてマークされたメンバー、または抽象クラスに含まれるメンバーは、抽象クラスから派生したクラスによって実装される必要があります。
部分的: http://msdn.Microsoft.com/en-us/library/wbx7zzdd%28v=vs.80%29.aspx
部分的な型定義により、クラス、構造体、またはインターフェースの定義を複数のファイルに分割できます。
ここにはいくつかの良い答えがあるようですが、それでももっと明確にするために書きます
Extern
C#仕様から
メソッド宣言にextern修飾子が含まれている場合、そのメソッドは外部メソッドと呼ばれます。外部メソッドは、通常、C#以外の言語を使用して外部で実装されます。外部メソッド宣言は実際の実装を提供しないため、外部メソッドのメソッド本体は単にセミコロンで構成されます。外部メソッドは一般的ではない場合があります。 extern修飾子は通常、DllImport属性と組み合わせて使用され、外部メソッドをDLL(ダイナミックリンクライブラリ)で実装できるようにします。実行環境は、外部メソッドの実装を提供できる他のメカニズムをサポートする場合があります。外部メソッドにDllImport属性が含まれている場合、メソッド宣言には静的修飾子も含める必要があります。
部分的
部分メソッドのシグネチャは部分型の一部で定義され、その実装は型の別の部分で定義されます。部分メソッドを使用すると、クラス設計者は、イベントハンドラーと同様に、開発者が実装するかどうかを決定できるメソッドフックを提供できます。開発者が実装を提供しない場合、コンパイラはコンパイル時に署名を削除します。部分メソッドには、次の条件が適用されます。
次の例は、部分クラスの2つの部分で定義された部分メソッドを示しています。
要約
メソッドまたはプロパティの宣言で抽象修飾子を使用して、メソッドまたはプロパティに実装が含まれていないことを示します。
抽象メソッドには次の機能があります。
この例では、クラスSquareはShapesClassから派生しているため、Areaの実装を提供する必要があります。
これがより良い理解に役立つことを願っています、ハッピーコーディング!