Derived类中的抽象方法覆盖,如何使私有

Asa*_*sad 7 c# oop overriding private abstract-methods

嗨我有一个类"A"与抽象方法

protected abstract List<Contributor> GetContributors(List<SyndicationPerson> contributersList);
Run Code Online (Sandbox Code Playgroud)

我想在以下条件下在派生类"B"中覆盖此方法

  • 它应该是B类私人的.

编译器不允许我在派生类"B"中将此方法声明为私有什么是正确的语法?

Jon*_*eet 8

你不能.这将违反A类中声明的可访问级别.除此之外,它将阻止它被A类调用!如果A类中的代码试图调用您以某种方式用私有实现覆盖的抽象方法,您会发生什么?

您可以将主实现设为私有,然后创建一个受保护的方法,如果您真的想要,则只调用私有方法.

为什么要将方法设置为私有,当它被设计为可从A调用时?

编辑:好的,现在你已经在评论中解释了你想做什么,你不能这样做.最接近的是将委托传递给A的构造函数 - 该委托可以引用私有方法.不幸的是,当你在构造函数链中传递参数时,你不能使用"this",所以你不得不做一些可怕的事情,例如编写一个静态方法,它将"this"作为它的第一个参数,实际上......除了它必须将它转换为正确的类型,因为父级不能声明它应该是哪种类型.然后父进程将调用委托而不是受保护的方法.

注意,这还将阻止进一步的派生类进一步"覆盖",这可能是也可能不是所希望的.

这是非常曲折的,我会尽可能地避免它.如果你真的担心派生类可能会做什么,我会尝试密封类,强迫人们使用组合而不是继承.这种语言并没有真正帮助你做你想做的事情.