2

我什至不太确定如何表达我的问题,所以我将举例说明。我想要相当于:

public class OuterClass 
{
   public InnerClass DoStuff(InnerClass this_class) 
     {
          this_class.number = 5;
          return this_class;
     }


   public class InnerClass
     {
          private int number = 0;
     }

}

我有一个内部类,程序员可以在其中设置一些变量等,但它也有一些他们不应该接触或需要知道的内部变量。外部类与内部类的实例一起工作,它需要了解这些内部变量。我可以想出一些更复杂的方法来实现我想要的,但我很好奇,有没有办法完成我在 C# 中得到的要点?或者只是不可能。

编辑:作为一个实际的例子,这是我使用的通用通信协议(套接字通信)。有一个套接字包装类(OuterClass),您创建一个消息类(InnerClass),在其中设置一些东西,然后将其交给处理所有内部内容的套接字包装器。Message 类具有套接字包装器设置和使用的一些内部数据,我希望我可以在原始类中拥有这些数据,而不必使用不同的内部类来存储它。

4

2 回答 2

9

我认为您想说“可以访问我的另一个课程,但不能访问我的程序集之外的课程”。

简单的解决方案是将内部类字段声明为internal,而不是私有的。您在同一个程序集中的类可以访问它们,但外部的类不能。

于 2012-05-17T21:02:28.750 回答
0

只需声明InnerClassprivate. 外面的任何人OuterClass都无法访问它。

如果要传递实例,请从公共类或接口继承,如下所示:

class OuterClass
{
    public abstract class AbstractInnerClass { ... };
    private class InnerClass: AbstractInnerClass { ... };

    public AbstractInnerClass DoStuff(AbstractInnerClass this_class)
    {
        InnerClass real_class = (InnerClass)this_class;
        ... do your stuff ...
    }
}

对外来说,只是AbstractInnerClass存在,而且InnerClass只是一个实现细节。

于 2012-05-17T21:00:59.370 回答