我创建了一个在构造函数中传递字符串参数的类。我在构造函数中更改参数的值。当控件返回到我的原始类时,该值不会更改。我希望它能改变 - 请帮忙
string NewNodeName = "";
AddNode NewNodeFrm = new AddNode( NewNodeName);
NewNodeFrm.ShowDialog();
if (NewNodeFrm.DialogResult.Equals(true))
{
MessageBox.Show(NewNodeName);
}
在名为
的班级public partial class AddNode : Window
{
private string NodeName;
public AddNode(ref string ANodeName)
{
NodeName = ANodeName;
NodeName = "Fred";
InitializeComponent();
}
答案 0 :(得分:4)
当您撰写NodeName = "Fred";
时,您正在更改NodeName
所指的内容。这是因为NodeName
本身不是ref string
。
答案 1 :(得分:2)
值得注意的是,字符串是一种不可变的引用类型,它的实现方式是偶尔出现一种值类型。所以当你这样做时:
NodeName = ANodeName;
您正在创建副本,而不是参考。
如果你做了这样的事情:
Foo NewNodeName = new Foo();
AddNode NewNodeFrm = new AddNode(ref NewNodeName);
MessageBox.Show(NewNodeName.ToString());
和
public class Foo
{
private int _a = 0;
public int BAR { get { return _a; } set { _a = value; } }
}
public class AddNode
{
private Foo NodeName;
public AddNode(ref Foo ANodeName)
{
NodeName = ANodeName;
NodeName.BAR = 30;
}
}
然后就可以了,调用者可以看到更改,因为您正在AddNode
方法中处理同一个对象。事实上,你不需要使用" ref"在这种情况下,关键字(通过引用传递)是因为我们未在Foo
方法中创建AddNode
的新实例。
答案 2 :(得分:0)
您可以克服使用对象。也许传递这个:
Public class NodeName
{
public string Name{get;set;}
}
然后在构造函数中设置一个局部变量并更改名称
public AddNode : Window
{
Private NodeNme name;
Public AddNode(NodeNme name)
{
this.name = name;
this.name.Name = "Fred";
}
}
因为您传递并存储了引用类型,这将反映您的类和消费者中的更改。