2

我有一个如下界面

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? 

}

我怎样才能只公开特定的方法并防止其他方法。

4

4 回答 4

3

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

在接口中你不能像 private 和 public 这样的修改器,默认情况下所有方法都是公共的。

于 2013-02-21T06:51:54.047 回答
2

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

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

当像这样完成时,减法只有在object转换为 I1时才可见

于 2013-02-21T07:06:33.833 回答
1

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

更进一步的默认方法interfacepublic
所以当你要定义它时,它应该是public唯一的。
这是一个链接,可以更好地理解Interfaces
http://www.codeproject.com/Articles/18743/Interfaces-in-C-For-Beginners 这是一个描述和http://www.codeproject.com
之间区别的链接/Articles/11155/抽象类与接口Interfaceabstract class

于 2013-02-21T06:52:23.577 回答
1

不知道为什么你需要这种行为。如果您只希望 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 的引用类型

于 2013-02-21T07:05:54.090 回答