如何防止我在类中实现的接口方法被实例化。
public interface Interface1
{
void Show();
}
public class ABC : Interface1
{
public void Show()
{
// any thing
console.WriteLine(:Hello");
}
}
class Program
{
static void Main(string[] args)
{
ABC a = new ABC();
}
}
在程序类中,我不想创建访问此方法。
答案 0 :(得分:4)
如果您真的只希望通过接口类型的表达式使用该方法,则可以使用explicit interface implementation:
void Interface1.Show()
{
throw new NotImplementedException();
}
你不能完全取消调用它的可能性 - 这显然会打破ABC
实现接口的事实。实际上,如果它不会真的实现整个界面,你应该考虑是否声明它实现了接口。
通过如上所述的显式界面实现:我们有:
ABC abc = new ABC();
abc.Show(); // Error
Interface1 iface = abc;
iface.Show(); // Fine at compile time; will throw your NotImplementedException
答案 1 :(得分:2)
答案是你不能
实现接口的类需要将它们全部实现为实例方法。这就是接口如何被设计用作类的合同。
如果您要使用静态方法,则不需要接口来保存合同,因为只有一个全局静态实现。
希望有所帮助。
答案 2 :(得分:1)
如果要阻止其他类查看和调用该方法,请将其标记为私有。
但是你不能用它来实现接口,因为接口方法的定义是公开的。
此外,如果您将方法标记为私有且调用代码具有足够的权限(相同的程序集),则调用者仍可以使用Reflection调用您的方法。
您可以在方法中遍历调用堆栈,以查看它的调用位置,并确定您是否喜欢调用方,并且可以从方法中删除快捷方式,或者如果您不这样做,则抛出异常。
但真正的要求是什么?底层问题是数据安全吗?该方法是否有危险(数据损坏的可能性,或者在错误的时间或某些时候在核反应堆中提取冷却棒的可能性?)
了解要求将帮助您确定正确的解决方案。