0

有没有办法让包装类公开,但其他类在 wr 中是私有/受保护的

假设这个脚本在 DLL 文件中。

protected class Class1
{
    public string Foo1() { return "Hello World!"; }
}

public class Class2
{
    Class1 class1 = new Class1();

    public Class1 Class1_Test 
    {
       get { return class1; }
    }
}

假设我有 Windows 窗体或网页。

我在这里打电话Class2.Class1_Test.Foo1(),我得到了一个"Hello World!"价值。

如何使两者都Class1()CLass1.Foo1()Windows 窗体不可见?

我收到语法错误,抱怨 Class2 由于保护级别而无法访问。

4

2 回答 2

3

通过公共接口公开受保护的类。

public interface IClass1
{
    string Foo1();
}

protected class Class1 : IClass1 { ... }

public class Class2
{
    ...
    public IClass1 Class1_Test { ... }
}
于 2013-07-11T23:50:44.747 回答
1

在您的示例中,如果您有一个包含Class1and的单独程序集Class2,则可以提供Class1一个内部构造函数,因此您只能在程序集中实例化它。

public class Class1
{
    internal Class1() 
    {
    }

    public string Foo1() { return "Hello World!"; }
}

public class Class2
{
    Class1 class1 = new Class1();

    public Class1 Class1_Test 
    {
       get { return class1; }
    }
}

尝试实例化的程序集之外的任何内容都Class1将收到错误

The type 'MyAssembly.Class1' has no constructors defined    
于 2013-07-11T23:27:44.503 回答