1

別のクラスを使用するクラスがあります。

最初のクラスには次のメソッドがあります。

public void myMethod()
{
    //Parameters are an enumeration.
    // Really is a exchange variable between this class
    //and the other class.
    Paramters myParameter = Parameters.Option1;

    MyClass2 myOtherClass = new MyClass2(myParameter);
}

2 番目のクラス:

public enum Parameters { Option1, Option2, Option3 }

MyClass2
{
    Parameters _myParameters;

    Public MyClass2(Parameters paramParameters)
    {
        _myParameters = paramParameters;
    }

    private void clickButton()
    {
        _myParameters = Parameters.Option2;
        this.Dispose();
    }
}

ダイアログを作成しParameters、メイン ウィンドウとダイアログ間の交換として機能し、ダイアログでの選択について通知する列挙型です。

ただし、 でclickButtonの値を変更する_myParametersと、 のコンストラクタでパラメータとして渡されたオブジェクトでは変更されませんMyClass2

列挙型を交換変数として使用する代わりに、列挙型を持つクラスを作成すると、選択を取得できます。交換クラスは次のようになります。

class MyExchangeClass
{
    Parameters myOption;
}

次に、コードは次のようになります。

public void myMethod()
{
    //Parameters are an enumeration. 
    // Really is a exchange variable between this class
    //and the other class.
    MyExchangeClass mySelection= new MyExchangeClass();

    MyClass2 myOtherClass = new MyClass2(mySelection);
}

2 番目のクラス:

public MyExchangeClass
{
    Parameters enum MySelection { Option1, Option2, Option3 }
}

class MyClass2
{
    MyExchangeClass _mySelection;

    Public MyClass2(MyExchangeClassparamParameters)
    {
        _mySelection= paramParameters;
    }

    private void clickButton()
    {
        _mySelection.MySelection = Parameters.Option2;
        this.Dispose();
    }
}

このようにしてClass1、メイン ウィンドウである は、 のプロパティで更新された値を取得しますclass MyExchangeClass

最初のソリューションで列挙が更新されない理由を知りたいのですが、可能であれば、列挙をクラスにラップする必要を避けたいからです。

4

2 に答える 2

2

最初のソリューションでは、列挙型は値の型であり、次の行であるため、クラス内の列挙型の値は変更されませんでした:

_myParameters = paramParameters;

のコピーを作成しparamParameters_myParameters完全に独立したスタンドアロン オブジェクトです。

2番目の例でMyExchangeClassは、参照タイプなので、次の行:

_mySelection= paramParameters;

_mySelection参照が参照していたのとまったく同じオブジェクトを指しparamParametersていました。

ドキュメントから:

値の型に基づく変数には、値が直接含まれます。ある値型変数を別の値型変数に割り当てると、含まれている値がコピーされます。これは、オブジェクト自体ではなくオブジェクトへの参照をコピーする参照型変数の割り当てとは異なります。

そして、列挙型は値型です、同上:

値の型は、次の 2 つの主要なカテゴリで構成されます。

  • 構造体

  • 列挙

于 2013-10-28T12:58:35.870 に答える