c# – 如何保存ref变量供以后使用?
发布时间:2020-12-15 06:48:44 所属栏目:百科 来源:网络整理
导读:所以这样做 public MyClass(ref Apple apple){ apple = new Apple("Macintosh"); // Works fine} 但是有可能做这样的事情吗? private Apple myApple;public MyClass(ref Apple apple){ myApple = apple;}public void ModifyApple(){ myApple = new Apple("M
所以这样做
public MyClass(ref Apple apple) { apple = new Apple("Macintosh"); // Works fine } 但是有可能做这样的事情吗? private Apple myApple; public MyClass(ref Apple apple) { myApple = apple; } public void ModifyApple() { myApple = new Apple("Macintosh"); // does not change the input variable like the first example did } 当ref变量复制到成员变量myApple时,它似乎失去了’ref-ness’,并重新分配它不再改变输入变量.有没有解决的办法? 解决方法
不是真的,不行在您的代码下次调用时,用作方法参数的原始变量可能不再存在:
void Foo() { MyClass x = Bar(); x.ModifyApple(); } MyClass Bar() { Apple apple = new Apple(); return new MyClass(ref apple); } 在这里,apple是一个局部变量,在一个堆栈框架中,我们调用ModifyApple时,它将被弹出. 您确定需要修改原始调用者的变量,而不是仅仅更改对象本身? 一种排序假的方法是使用包装器类型来开始: public class MutableWrapper<T> { public T Value { get; set; } } 然后传入一个MutableWrapper< Apple>,并将其存储在你的类中.然后在ModifyApple你可以写: wrapper.Value = new Apple(); 这不会改变调用者的变量,但是下一次调用者查看Value属性时,他们会看到你的新的apple. 说实话,这种事情往往会导致难以维护的代码,甚至引用对于可读性来说也不是很好.如果您可以解释您想要实现的更大的图景,那么我们可能会提出一个更好的整体方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |