0

基本上我有一个类似的类Individual和另一个继承自它的类 - IndividualForSomeAnotherWork.

我也有一个名为的类Population和类似的方法Add(Individual individual)

我可以通过类型传递IndividualForSomeAnotherWorkto Add 方法吗?Individual或者我应该使用接口还是抽象类?我问是因为我一直在问NullReferenceException

编辑:很抱歉这么久没有回答。我的问题是没有初始化包含对象的列表,所以我无法添加到它。但我也想知道我可以像之前所说的那样传递参数。感谢您的回答。

4

3 回答 3

1

我会推荐一种IIndividual接口类型。在这种情况下,如果您有:

abstract class Individual : IIndividual {

}

class IndividualForSomeOtherWork : Individual {

}

...然后Population.Add(IIndividual Individual)将接受基类Individual以及Individual.

将接口视为与 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 回答
0

就您在这里尝试做的事情而言,抽象类与接口没有根本的不同。在这两种情况下,不可能有一个类型与形参的类型完全匹配的参数。参见DrawImage以获得一个明确的例子(Image 是一个抽象类)。

您看到的 NullReferenceException 与抽象的参数类型没有直接关系。

于 2013-10-25T23:35:12.257 回答