【问题标题】:How to prevent expose any other interface methods?如何防止暴露任何其他接口方法?
【发布时间】:2013-02-21 06:50:01
【问题描述】:

我有一个如下界面

public interface I1 
{
public int add(int a , int b);

public int subtract (int a, int b);

}

public class Myclass : I1
{
//here I can access both the methods of interface I1
//add and subtract but i want to expose only add not subtract method
//How can I achieve this? 

}

我怎样才能只暴露特定的方法并阻止其他方法。

【问题讨论】:

  • 你不能阻止它,但是你可以用Explicit interface implementations“隐藏”类型Myclass(但不是类型I1)上的方法:“显式接口成员实现只能通过接口实例访问,并且在这种情况下仅通过其成员名称引用。"

标签: c# asp.net .net interface


【解决方案1】:

对于这种要求,请选择抽象类而不是接口,因为在接口中,默认情况下所有方法都是公共的。这是抽象类和接口之间的区别之一。

接口中不能像private和public这样修改,默认所有方法都是public的。

【讨论】:

    【解决方案2】:

    您可以通过显式实现来隐藏该方法。我会说这是个坏主意,您可能应该将界面一分为二,但这是可能的

    public class MyClass {
        public int I1.subtract(int a, int b) {
            throw new NotImplementedException();
        }
    }
    

    只有在object 转换为 I1

    时,才能看到这样的减法

    【讨论】:

      【解决方案3】:

      接口的概念说你if you implement an interface you need to implement all the methods所以我觉得做不到

      此外interface 的默认方法是public
      因此,当您要定义它时,它应该只是public
      这是一个链接,可以更好地理解Interfaces
      http://www.codeproject.com/Articles/18743/Interfaces-in-C-For-Beginners
      这是一个描述Interfaceabstract class之间区别的链接
      http://www.codeproject.com/Articles/11155/Abstract-Class-versus-Interface

      【讨论】:

        【解决方案4】:

        不知道你为什么需要这样的行为。如果您只希望 MyClass 对象可以使用其中一种方法,则可以为该特定方法使用显式接口实现

        public class Myclass : I1
            {
                public int add(int a, int b)
                {
                    return 1;
                }
        
                public int I1.subtract(int a, int b)
                {
                    return 2;
                }
            }
        

        在这种情况下,当您创建 MyClass 的对象时,您将只有 add 方法,而没有减去方法。要访问减法,您必须使用 I1 的引用类型

        【讨论】:

          猜你喜欢
          • 2021-03-01
          • 1970-01-01
          • 2015-10-30
          • 2012-08-20
          • 2023-01-26
          • 2017-01-28
          • 1970-01-01
          • 1970-01-01
          • 2016-08-02
          相关资源
          最近更新 更多