0

私は基本的な疑問を持っています.C#でプログラミングしているときに非常に一般的であると思います.

基本的に、現在のコードがどのように構成されているかを示します。

ファイル: api.cs

namespace API
{
    class OutputClass{
        private int var1;
        private int var2;
        int getVar1()
        {
            return var1;
        }
        int getVar2()
        {
            return var2;
        }
    }

    class APICore {
        public event Action<OutputClass> FrameDecodeComplete;
        void someFunction() {
            OutputClass myOutput;

            myOutput.var1 = 1;    
            myOutput.var2 = 2;

            FrameDecodeComplete(myOutput);
        }
    }
}

私の要件は、この API のユーザーがタイプ APICore のオブジェクトを作成し、OutputClass オブジェクトの形式で出力を受け取ることです。

明らかに、行は保護レベルであるため、エラーをスローしますmyOutput.var1 = 1;myOutput.var2 = 2;

ただし、API のユーザーが var1、var2 の値を設定できないようにする必要もあります。そのため、var1 と var2 のアクセス レベルを public に変更したくありません。また、setVar1()、setVar2() などの関数も定義したくありません。

コメントよろしくお願いします。

4

5 に答える 5

0

OutputClass設定するパラメーターを受け取る保護されたコンストラクターを指定してから、保護された基本コンストラクターから派生してパラメーターを渡す、入れ子になったプライベート クラスvar1var2指定します。APICoreOutputClass

何かのようなもの:

class OutputClass{
    private int var1;
    private int var2;
    int getVar1()
    {
        return var1;
    }
    int getVar2()
    {
        return var2;
    }

    protected OutputClass(int _var1, int _var2)
    {
        var1 = _var1;
        var2 = _var2;
    }
}

class APICore {
    public event Action<OutputClass> FrameDecodeComplete;
    void someFunction() {
        SubOutputClass myOutput = new SubOutputClass(1,2);

        FrameDecodeComplete(myOutput);
    }

    private SubOutputClass : OutputClass
    {
        public SubOutputClass(int var1, int var2) : base(var1, var2)
        {
        }
    }
}

同じアセンブリinternal内のどのクラスでもアクセスできます。あなたにとって問題になるかもしれないし、そうでないかもしれません。

于 2013-10-17T20:10:41.997 に答える