嗨,我有一个类“A”作为抽象方法
protected abstract List<Contributor> GetContributors(List<SyndicationPerson> contributersList);
我想在派生类“B”中使用以下条件覆盖此方法
- 它应该是B类私有(private)的。
编译器不允许我在派生类“B”中将此方法声明为私有(private) 正确的语法是什么?
最佳答案
你不能。这将违反 A 类中声明的可访问性级别。除此之外,它将阻止它被 A 类调用!如果类 A 中的代码试图调用您以某种方式被私有(private)实现覆盖的抽象方法,您期望发生什么情况?
您可以将主要实现设为私有(private),然后创建一个只调用私有(private)方法的 protected 方法,如果您真的愿意的话。
当方法设计为可从 A 调用时,为什么首先要将方法设为私有(private)?
编辑:好的,现在您已经在评论中解释了您想做什么,但您不能这样做。最接近的方法是将委托(delegate)传递给 A 的构造函数——该委托(delegate)可以引用私有(private)方法。不幸的是,当你在构造函数链中传递参数时你不能使用“this”,所以你不得不做一些可怕的事情,比如编写一个将“this”作为第一个参数的static方法,有效地...除了它还必须将其转换为正确的类型,因为父级无法声明它应该是哪种类型。然后父级将调用委托(delegate)而不是 protected 方法。
请注意,这也会阻止进一步的派生类进一步“覆盖”,这可能是合意的,也可能不是合意的。
它非常曲折,我会尽可能避免它。如果您真的担心派生类可能会做什么,我会尝试密封该类并强制人们使用组合而不是继承。该语言并不能真正帮助您在这里做您想做的事。
关于c# - 派生类中的抽象方法覆盖,如何使私有(private),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1816399/