gpt4 book ai didi

c# - 为什么参数没有更新?

转载 作者:太空宇宙 更新时间:2023-11-03 18:33:04 25 4
gpt4 key购买 nike

我有一个类使用另一个类。

第一类有这个方法:

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);
}

第二类:

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);
}

第二类:

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 属性中的更新值。

我想知道为什么在第一个解决方案中没有更新枚举,因为如果可能的话,我想避免将枚举包装在一个类中。

最佳答案

However, when in the clickButton I change the value of the _myParameters, is not changed in the object that was passed as parameter in the constructor of MyClass2.

不,不会的。该值是按值传递的 - 两个变量(myParameter_myParameters)是独立变量。对一个变量的更改不会影响另一个变量。这就是所有类型在 C# 中的工作方式。

要让调用方看到方法中参数的更改,您可以使用ref参数,但这在您的情况下不可行,因为您更改最初通过参数填充的实例变量。

您可以将值包装在可变类中,将对该类实例的引用传递给 MyClass2,然后在 MyClass2 中改变对象 - 更改将在您的第一个类中看到,因为这将更改对象内的数据,而不是 MyClass2 的实例变量。很难知道这是否真的是一个好的解决方案,因为我们的上下文太少了 - 对于像 MyClassmyMethod 这样的名称,我们对大局一无所知这是要实现的目标。

关于c# - 为什么参数没有更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19635311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com