として私はたとえば...派生オブジェクトをインスタンス化するためのプレースホルダとして使用されている抽象基底クラスのオブジェクトを持っている状況を持っている...C#インスタンス化ベースオブジェクト派生オブジェクト
public abstract class Fruit(){ //stuff}
public class Banana() : Fruit(){ //stuff }
public class Apple() : Fruit(){ //stuff }
public class FruitSalad()
{
Fruit SomeKindOfFruit;
public DoStuff(Fruit frt)
{
SomeKindOfFruit = new ?????
}
}
だから機能は果物を受け入れるつもりです...プログラムは果物の種類を知らない...アップルになる可能性があります...バナナになる可能性があります...キウイかもしれません...しかし、私はそれが必要です入力frtを取って、SomeKindOfFruitに "こんにちは.. frtはアップルだから、あなたは今アップルになっている"と言います。
私はSomeKindOfFruit = new Apple()を知っています。私がしなければならないことは、if/thenステートメントの束をハードコーディングするか、型を評価して可能なすべての派生クラスを明示的に宣言しなければならないことです。クラス...派生クラスの派生クラス...広告のnauseum ...特にそれを行うには、とにかくそれを評価するためにとにかく型を引っ張らなければならないので、それは非常に簡単に言うことができるだろう、 "この派生物を見ますか?このことが何であれ、あなたは今、そのタイプのものです"。ただ1つのコードで、必要な数の派生クラスを作成することができます。私は、評価を追加するために繰り返し行う必要はありません。
私が考えたものである...と私は当初、単純な操作を行うことを試みた...式に等しく、それがnull参照の例外がスローされます[EDIT]
。さて、私が実際にやっていることは果物とは関係ありませんが、それは雑草に迷わずに問題を説明する最も簡単な方法でした。実際のプログラムがやっていることは、私は2つのクラスを持っています...よく、GUIコンポーネントを実行する1つのクラスと、フードの下で操作されるすべてのデータ型であるクラスのセット(ベース+派生クラス)ネットワーク。それらのクラスのそれぞれの中で私は、理論上はお互いを参照することになっているオブジェクトを作成しました。シーケンスは、格納されたSQLデータからデータクラスが作成されることです。すべてのデータが作成されたら、GUI上に表示するグラフィッククラスを作成するメソッドがデータクラスにあります。その部分は、データクラスは、グラフィックスクラスに自身へのリフレクションを与えることになっているので、両方のクラスが他のクラスへの参照を持ち、両方向に情報が移動できるようになっています...グラフィックスコンポーネントを介して関連するデータクラスとデータクラスは、ネットから情報を取得し、それをグラフィカルに表示することができます。
public abstract class baseData() {
public graphicClass GraphicRepresentation;
public baseData(stuff){
//Sets all the relevant data
}
public void Activate(){
GraphicRepresentation = new graphicClass();
//Sets all the relevant components in the class
GraphicRepresentation.DataReference = this;
}`
}
上記はnull参照例外をスローします。私が考えることができるのは、baseDataオブジェクトであるDataReferenceを "これ"を割り当てる前にインスタンス化する必要がありますが、抽象クラスをインスタンス化できないため、インスタンス化できる必要がありますどんな派生型であっても、 "this"は "this"と同等にすることができます。
'SomeKindOfFruit = frt' ????それがうまくいかない理由はあまり明確ではありません。 –
問題が見つかった場合は、質問を破棄しないでください。コメントにあなたの発見を説明して、あなたの質問にオフトピック - >タイプミスとしてフラグを立てるだけです。元の質問に戻りました。 – honk
[この改訂版](http://stackoverflow.com/revisions/38669603/3)に掲載されたOPの説明のため、タイプミスとしてクローズしています。 – honk