如何在方法中具有抽象参数
本文关键字:抽象 参数 方法 | 更新日期: 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 与抽象的参数类型没有直接关系。