c ++ / cli:将public interface方法设置为类实现中的内部

时间:2014-07-21 09:46:29

标签: inheritance c++-cli

我在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#。这该怎么做 ?我尝试将其设为私有但却出现同样的错误。

1 个答案:

答案 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;