我在CLI中有一个接口,它有一个方法。我在一个类中实现了这个接口,但是我不希望在C#中访问接口方法,所以我在类声明中将其设置为内部。但它给出了编译错误必须提供接口方法的实现。我已经为类的.cpp文件中的所有文件提供了方法实现。
public interface class BASE
{
void foo(String^ str);
}
类别:
public ref class Test: public BASE
{
public:
//some public method
internal:
void foo(String^ str); // This gives error.
}
我不想将foo()
公开给C#。这该怎么做 ?我尝试将其设为私有但却出现同样的错误。
答案 0 :(得分:2)
错误消息很笨拙,对于C ++ / CLI编译器来说并不完全不常见。但它反对您尝试使该方法无法访问。因为它不是真的无法访问,所以您班级的用户可以轻易绕过它并执行此操作:
var obj = new Test();
var itf = (BASE)obj;
itf.foo("Fooled");
使界面公开的不可避免的副作用。阻止客户端代码使用该界面的唯一方法是将其设为 internal ,删除 public 关键字。无论哪种方式,您都可以使用接口方法的显式实现使方法直接可见:
internal:
virtual void bar(String^ str) = BASE::foo;