如何在方法中具有抽象参数

本文关键字:抽象 参数 方法 | 更新日期: 2023-09-27 18:37:03

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

我也有一个名为Population的类和像Add(Individual individual)这样的方法。

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

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

如何在方法中具有抽象参数

我会推荐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();

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

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

就您在这里尝试执行的操作而言,抽象类与接口没有根本区别。 在这两种情况下,都不可能有一个类型与形式参数的类型完全匹配的参数。 有关此内容的明确示例,请参阅 DrawImage(Image 是一个抽象类)。

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