我怎样才能在方法中有抽象参数?

时间:2013-10-25 19:30:42

标签: c# oop

Basiclly我有一个类Individual和另一个继承它的类 - IndividualForSomeAnotherWork

我也有一个名为Population的课程和Add(Individual individual)等方法。

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

编辑: 很抱歉没有回答这么久。我的问题是没有初始化包含对象的List,所以我无法添加它。但我也想知道我可以像前面所说的那样传递论据。谢谢你的回答。

3 个答案:

答案 0 :(得分: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();

此功能必须在专门的个人后代中定义。

答案 1 :(得分:0)

是的,您可以将IndividualForSomeAnotherWork传递给Add(Individual individual)。它应该正常工作。您的错误是由于其他原因造成的。尝试自己调试,或发布更多详细信息和代码,我们可能会提供帮助。

答案 2 :(得分:0)

就你在这里要做的事而言,抽象类与界面并没有根本的不同。在这两种情况下,都不可能有一个类型与形式参数的类型完全匹配的参数。有关此明确的示例,请参阅DrawImage。(Image是一个抽象类)。

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