1

我对 C# 不是很熟悉,也无法在任何地方找到合理的答案。我只是想从一个对调用者来说是不透明的函数返回一个对象。我仍然希望用户能够传递对象,我只是不希望他们调用对象上的任何方法。

在 C++ 中,您只需返回一个 void*,然后接收该对象的函数会将其转换为适当的类型并调用其上的方法。

public class Blob
{
    public void Method1() { do_something(); }
    public void Method2() { do_something_else(); }
}

public class BlobMaker
{
    public Blob CreateBlob() { return new Blob(); }  // This needs to return something opaque
}

public class BlobUser
{
    public void ConsumeBlob(var b)   // Method would take the opaque type
    {
        Blob newBlob = (Blob)b;
        b.Method1();
        b.Method2();
    }
}

public class MainApp
{
    BlobMaker m = new BlobMaker();
    var obj = m.CreateBlob();        //  obj returned by BlobMaker should be opaque.

    obj.Method1();                   //  This should not be allowed
    obj.Method2();                   //  This should not be allowed

    BlobUser user = new BlobUser();
    user.ConsumeBlob(obj);

}

就我而言,我只是不想完全相信用户可以访问 Blob 方法,所以我希望对象是不透明的。在 Win32 API 中,所有类型的 Windows 结构都像 void* 指针一样不透明。

现在我知道您可以使用“不安全”并且可能在 C# 中做同样的事情,但我想知道 C# 中是否有更好的方法来做到这一点?

** 编辑 ** 忽略我的人......我是个疯子......答案很简单。该方法所要做的就是返回对象而不是Blob,然后它就完成了。对不起,这是一个经过认证的大脑放屁。

4

0 回答 0