[英]How Can I have abstract parameters in method?
Basiclly我有这样一类Individual
,另一个类,从它继承- IndividualForSomeAnotherWork
。
我也有一个称为Population
的类和类似Add(Individual individual)
。
我可以通过Individual
类型传递IndividualForSomeAnotherWork
添加方法吗? 还是应该使用接口或抽象类? 我问是因为我一直都在获取NullReferenceException
。
编辑:很抱歉没有回答这么久。 我的问题不是初始化包含对象的列表,所以我无法添加它。 但是我也想知道我可以像我之前所说的那样传递论点。 感谢您的回答。
我会推荐一个IIndividual
类型的接口。 在这种情况下,如果您具有:
abstract class Individual : IIndividual {
}
class IndividualForSomeOtherWork : Individual {
}
...然后Population.Add(IIndividual Individual)
将接受基类的Individual
以及任何后代Individual
。
将接口视为与“人口”类的契约,即该集合中的任何个人都将实现该个人所需的所有功能。
请注意,不需要抽象的Individual
来实现接口内定义的所有功能。 如果界面要求:
interface IIndividual {
void DoWork();
}
...然后,基本Individual
不了解IndividualForSomeOtherWork
将实际执行哪些专业工作。 因此,在抽象类中:
abstract void DoWork();
此功能必须在专门的单个后代中定义。
是的,您可以将IndividualForSomeAnotherWork
传递给Add(Individual individual)
。 它应该可以正常工作。 您的错误是由于其他原因。 尝试自己调试一下,或者发布更多详细信息和代码,我们可能会提供帮助。
就您在此处尝试执行的操作而言,抽象类与接口没有本质上的区别。 在这两种情况下,都不可能有一个类型与形式参数完全匹配的参数。 有关此内容的显式示例,请参见DrawImage (Image是一个抽象类)。
您看到的NullReferenceException与抽象的参数类型没有直接关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.