2011-02-09 7 views
6

「抽象クラスまたはインタフェースのインスタンスを作成できません」私はプロジェクトのためにabstractに私の基本クラスを変更し、今私は次のエラーを受信して​​います:は、C#のエラーメッセージ

Cannot create an instance of the abstract class or interface

私はエラーが発生しますabstractクラスの新しいインスタンスの名前付けは許可されていないためですか?

newPlane = new Airplane_Abstract(name, position); 
+1

あなたは正しく推測しました。 –

+1

フレームワークのガイドラインフレームワークのガイドラインフレームワークのガイドラインフレームワークのガイドライン – Will

+2

戻って抽象クラスについて少し読んだら、あなたは額を叩き、 "duh"に行くでしょう。 http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71).aspx(最初の箇条書き点) –

答えて

18

抽象クラスのインスタンスを作成することはできません。それをいくつかの実装ロジックを含む可能性のあるインターフェースと考えてください。定義のない抽象インスタンスメソッドを呼び出すと、どのようなことが起こると思いますか?

+0

もちろん、抽象クラスを継承する具象クラスのインスタンスを作成することもできます。このようなインスタンスは、抽象クラスのインスタンスとも言えます。 –

+0

@JeppeStigNielsen:抽象クラスは、抽象メソッドを宣言するクラスです。抽象クラスのインスタンスを作成することはできません(コンパイラはあなたにそう言うでしょう!)もちろん、非抽象サブクラスのインスタンスを作成することはできますが、それは疑問ではありません。 )あなたのポイントは何ですか? –

+0

これは単なる専門用語コメントです。多くの人がサブクラスのインスタンスをインスタンスとも呼びます。例を見てください。[この答えは別のスレッドでEric Lippertさんが(http:// stackoverflow。com/a/5602284/1336654)。あなたの答えはもちろん完全に正しいです、私はちょうど一般的なこの他の用語があると言いたいと思います。 –

5

抽象クラスのインスタンスを作成することはできません。それは何ですか?抽象を意味します。

13

「純粋仮想」(abstract:C#)の意味について質問した以前の質問を見ました。あなたがabstractクラスをインスタンス化することはできません

理由は、それがおそらくなし実装で、abstractメンバーを持っているということです。だからあなたのクラスは次のようになります言う:

abstract class Airplane_Abstract 
{ 
    public abstract int GetSomeInteger(); 
} 

その後、あなたはこれらのいずれかをインスタンス化することができ、あなたがこのようなコードを書くことができ仮定:

var airplane = new Airplane_Abstract(); 

// What would this be? 
int integer = airplane.GetSomeInteger(); 

は確かに、私はあなたが実際にを持っていると信じていません抽象クラスに抽象メンバを持つこと。しかし、抽象クラスの一般的な考え方は、それ自体は存在できないものであるということです。それを継承するクラスでさらに定義する必要があります。抽象メンバは、なぜこれが最も重要なのかを示しています。他の理由があるかもしれません。

たとえば、Shapeと考えてください。これは、抽象クラスとして意味をなさせるもののかなり一般的な例です。 を実際にインスタンス化することはできません。Shapeですか? ( "形状を作成する" "どのような形状ですか?" "いいえ、抽象的な形状だけです。"

+0

叙事詩解説:D –

関連する問題