我有一个界面如下
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?
}
我如何只公开特定方法并阻止其他方法。
答案 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
以下是描述Interface
和abstract 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
的引用类型