当前位置: 首页 > 编程语言 > C#

如何保存ref变量以备后用?分享

时间:2023-04-10 15:42:19 C#

如何保存ref变量以备后用?所以这有效..publicMyClass(refAppleapple){apple=newApple("Macintosh");//工作正常}但是有可能做这样的事情吗?私有苹果myApple;publicMyClass(refAppleapple){myApple=apple;}publicvoidModifyApple(){myApple=newApple("Macintosh");//不像第一个例子那样改变输入变量}当ref变量被复制到成员变量myApple时,它??似乎失去了它的“ref-ness”并且重新分配它不再改变输入变量。有解决办法吗?不,不。下次调用代码时,用作方法参数的原始变量可能不再存在:voidFoo(){MyClassx=Bar();x.修改苹果();}MyClassBar(){Appleapple=newApple();返回新的MyClass(参考苹果);在这里,apple是一个局部变量,存在于栈帧中,当我们调用ModifyApple时弹出。您确定需要修改原始调用者的变量而不仅仅是更改对象本身吗?解决此类问题的一种方法是从包装类型开始:publicclassMutableWrapper{publicTValue{get;放;然后传入MutableWrapper,并将其存储在您的类中。然后在ModifyApple中你可以这样写:wrapper.Value=newApple();这不会更改调用者的变量,但下次调用者查看Value属性时,他们会看到您的新Apple。老实说,这种事情往往会导致代码不可维护,甚至refs的可读性都不太好。如果你能解释你想要实现的目标的总体情况,我们可能会建议一个更好的整体方法。ref-ness是函数参数和传递给函数的参数的属性。它通常不是变量(甚至字段)的属性。事实上,你在那里尝试的事情从一开始就注定了。不,不。myApple是一个包含对Apple的引用的字段;但是,参数apple实际上是对Apple的引用。将apple分配给myApple会取消引用参数的值。除此之外,它们是独立且独特的。所以不:这是不可能的。可能是这样的:publicclassAppleWrapper{publicAppleValue{get;set;}}现在;如果存储AppleWrapper,任何数量的调用者都可以访问和更改.Value为什么不让ModifyApple返回修改后的Apple实例?以上就是C#学习教程:如何保存ref变量以备后用?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你多多关注——publicAppleModifyApple(){myApple=newApple("Macintosh");//不像第一个例子那样改变输入变量returnmyApple;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: