是否可以在实现接口(interface)的类中阻止公共(public)非接口(interface)方法的实现?
例如
public interface ICanDoSomething
{
void CanDoA();
void CanDoB();
}
public class Doer : ICanDoSomething
{
public void CanDoA()
{
//Do A
}
public void CanDoB()
{
//Do B
}
public void CanDoC()
{
//Don't do this!!! it's not defined in the interface!!!
}
}
澄清一下,我想在编译时阻止它,而不是在运行时。
最佳答案
如果 C# 能够实现您想要实现的目标,那么该语言本身就会破坏面向对象的编程功能之一:封装。
让实现者以他们自己的方式实现您的接口(interface),并关注接口(interface)实现的质量,而不是将您的精力放在不要实现比接口(interface)定义的方法更多的方法 (即实现实现者应通过的单元/集成测试,以证明黑盒确实按预期工作)。
当您使用接口(interface)时,您会遇到黑匣子:您不关心实现如何完成工作,但您关心它是否正确完成工作。
摘自您在自己的问题中添加的一些评论:
No specific use case, just want to direct those who use libraries to component oriented functionality and avoid god objects.
您想避免上帝对象,但您想要上帝方法。每个人总是更喜欢关注点分离和分段良好的类,而不是看到 3 个方法,每个方法有 1k 行代码。
OP 说...
What about breaking the single responsibility principle? If a class implementing an interface suddenly starts doing stuff which can easily be a responsibility of other class, isn't it breaking OOP as well?
不,单一职责原则与面向对象编程的定义无关(即继承、多态和封装),但它与代码质量有关。
代码质量无法通过接口(interface)或使用任何自己的编程语言结构来保证。这就是code review的使命.
当然,自动化测试可确保代码高质量运行,这不同于高质量编码。
关于c# - 防止实现不是接口(interface)方法的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32305759/