如何防止暴露任何其他接口方法?

时间:2013-02-21 06:50:02

标签: c# asp.net .net interface

我有一个界面如下

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 个答案:

答案 0 :(得分:3)

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

在接口中你不能像私有和公共一样放置modfier,默认情况下所有方法都是公共的。

答案 1 :(得分:2)

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

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

完成后,只有object 强制转换为I1

时才会显示减法

答案 2 :(得分:1)

界面的概念说你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

答案 3 :(得分: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

的引用类型