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)があり、Messageクラス(InnerClass)を作成し、それにいくつか設定して、すべての内部要素を処理するソケットラッパーに渡します。Messageクラスには、ソケットラッパーが設定して処理する内部データがいくつかあります。これを元のクラスに格納するために別の内部クラスを用意しなくても、それを元のクラスに含めることができると期待していました。

4

2 に答える 2

9

「私のクラスの別のクラスにはアクセスできますが、アセンブリ外のクラスにはアクセスできません」と言いたいと思います。

internal簡単な解決策は、内部クラスのフィールドをプライベートではなく、として宣言することです。同じアセンブリ内のクラスはそれらにアクセスできますが、外部のクラスはアクセスできません。

于 2012-05-17T21:02:28.750 に答える
0

InnerClassとして宣言するだけprivateです。外部の誰も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 に答える