【问题标题】:Prevent C# class from implementing any method other than what is defined in an interface [closed]防止 C# 类实现接口中定义的方法以外的任何方法 [关闭]
【发布时间】:2015-09-21 20:17:58
【问题描述】:

是否可以在 Visual Studio (C#) 中定义具有某些方法的接口并强制实现该接口的类只定义接口中定义的方法,并阻止该类定义任何未指定的方法在界面中?

【问题讨论】:

  • 我认为这是不可能的。请问你为什么想要这个?
  • 不,如果可能的话,责任人会被愤怒的开发人员追捕并用石头砸死。
  • 我相信可以有一个自定义的 fxcop 规则,在编译时会检查它。他似乎不希望语言本身具有这样的功能,而是希望在 Visual Studio 中。
  • 您为什么要这样做?如果你有一个特定的案例,你可以询问这个问题,也许有一种方法可以解决你的问题,它不需要在 C# 中无法完成的事情。例如,您真正想要的是委托而不是接口。
  • 我真的不知道你为什么想要那个。处理接口后,除了它定义的 API 之外,您不需要也不应该关心其他任何事情。

标签: c# methods interface


【解决方案1】:

据我所知,界面是一种包容性合同,而不是排他性合同。您要处理此问题的方法是调用类的接口实例化而不是具体实例化。请参见下面的示例。这样做,您将代码限制为只能查看接口定义的特定方法。

现在,有些人会指出您可以编写一个框架,并使用反射来比较接口方法和类方法——但我不怀疑这是 OP 的意图。

public interface IMyInterface
{
    bool AmITrue { get; set; }
}

public class Class1 : IMyInterface
{
    public bool AmITrue { get; set; }
    public bool AmIAnotherProperty { get; set; }
}

public class MainClass
{

    public MainClass()
    {
        IMyInterface limitedClass = new Class1();

        var works = limitedClass.AmITrue;
        var doesNotWork = limitedClass.AmIAnotherProperty;
    }

}

【讨论】:

  • 可能应该将AmIAnotherMethod 重命名为AmIAnotherProperty
  • @juharr doh!!!谢谢。
【解决方案2】:

不,这是不可能的。

但听起来你真的想自己定义一个class,那不是达到同样的效果吗?

【讨论】:

  • 这就是我的想法。为什么要实现一个类的接口只允许该接口功能。只是不要实现接口并在该类中定义必要的功能......
猜你喜欢
  • 2011-09-23
  • 2015-05-22
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
相关资源
最近更新 更多