我有一个使用另一个类的类.
第一类有这个方法:
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);
}
Run Code Online (Sandbox Code Playgroud)
第二课:
public enum Parameters { Option1, Option2, Option3 }
MyClass2
{
Parameters _myParameters;
Public MyClass2(Parameters paramParameters)
{
_myParameters = paramParameters;
}
private void clickButton()
{
_myParameters = Parameters.Option2;
this.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
我是什么创建一个对话框,Parameters是一个枚举,用作主窗口和对话框之间的交换,以通知对话框中的选择.
但是,当clickButton我在I中更改其值时_myParameters,在构造函数中作为参数传递的对象中不会更改它MyClass2.
如果不是使用枚举作为交换变量,而是创建一个具有枚举的类,那么我可以得到选择.交换类将是这样的:
class MyExchangeClass
{
Parameters myOption;
}
Run Code Online (Sandbox Code Playgroud)
那么代码将是:
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);
}
Run Code Online (Sandbox Code Playgroud)
第二课:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,Class1主窗口获取了属性中的更新值class MyExchangeClass.
我想知道为什么在第一个解决方案中枚举没有更新,因为如果可能的话,我想避免将枚举包装在一个类中.
但是,当在clickButton中我更改_myParameters的值时,在MyClass2的构造函数中作为参数传递的对象中不会更改.
不,它不会.值是通过值传递的 - 两个变量(myParameter和_myParameters)是独立变量.对一个变量的更改不会影响另一个变量.这就是所有类型在C#中的工作方式.
对于调用者可以看到的方法中的参数的更改,您可以使用ref参数,但是在您更改最初通过参数填充的实例变量时,这不可行.
你可以将值包装在一个可变类中,将对该类的实例的引用传递给MyClass2,然后在内部改变对象MyClass2- 在第一个类中可以看到该更改,因为这将改变对象内的数据而不是.的实例变量MyClass2.很难知道这是否真的是一个很好的解决方案,因为我们的上下文很少 - 有这样的名字,MyClass而且myMethod我们对这个想要实现的目标没有任何线索.