繁体   English   中英

如何在方法中使用抽象参数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM