0

基本的に、次のようなIndividualクラスと、それを継承する別のクラスがありIndividualForSomeAnotherWorkます。

私もと呼ばれるクラスとのPopulationようなメソッドを持っていAdd(Individual individual)ます。

タイプIndividualForSomeAnotherWorkを介して Add メソッドに渡すことはできますか? Individualまたは、インターフェイスまたは抽象クラスを使用する必要がありますか? いつもお世話になっているので質問NullReferenceExceptionしています。

編集:長い間答えられなくてごめんなさい。私の問題は、オブジェクトを含むリストを初期化していなかったため、追加できませんでした。しかし、先ほど言ったように、引数を渡すことができるかどうかも知りたいと思いました。回答ありがとうございます。

4

3 に答える 3

1

IIndividualインターフェースのタイプをお勧めします。この場合、次の場合:

abstract class Individual : IIndividual {

}

class IndividualForSomeOtherWork : Individual {

}

...次に、基本クラスと の子孫をPopulation.Add(IIndividual Individual)受け入れます。IndividualIndividual

インターフェイスは、そのコレクション内のすべての個体が個体に必要なすべての機能を実装しているという、Population クラスとのコントラクトと考えてください。

Individualインターフェース内で定義されたすべての関数を実装するために抽象が必要なわけではないことに注意してください。インターフェースが以下を必要とする場合:

interface IIndividual {
   void DoWork();
}

...その場合、ベースは、実際にIndividualどのような専門的な作業を行うかについて知識がありません。IndividualForSomeOtherWorkしたがって、抽象クラスでは次のようになります。

abstract void DoWork();

この関数は、特殊化された個々の子孫内で定義する必要があります。

于 2013-10-25T19:42:02.440 に答える
0

はい、IndividualForSomeAnotherWorktoを渡すことができますAdd(Individual individual)。正しく動作するはずです。あなたのエラーは何か他のものによるものです。自分でデバッグしてみるか、詳細とコードを投稿してください。お役に立てるかもしれません。

于 2013-10-25T19:33:13.117 に答える