我正在尝试以下代码:
public partial class Test: Window
{
public Test(ref List</* Type */> LList)
{
[...]
this.ListField = LList;
}
private List</* Type */> ListField;
}
C#不会在“ListField”中保存引用。 例如:
Test test = new Test(ref /* List</* Type */>-variable*/)
---------
public partial class Test: Window
{
public Test(ref List</* Type */> LList)
{
[...]
this.ListField = LList;
}
private List</* Type */> ListField;
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
ListField = null;
}
}
关闭表单后,给public Test(ref List</* Type */> LList)
的对象没有改变(它不是“空”)。
那么我如何保存“ListField”中的引用?
答案 0 :(得分:2)
(我确定这是重复的,但我怀疑由于术语重载会很难找到例子。)
它肯定会在ListField
中保存一个引用。这就是可以做的全部 - ListField
的值只能作为参考,因为List<T>
是一个类。
您真正想要的是保持ref
的别名行为,但仅适用于参数 - 从不使用字段。重要的是要将“通过引用传递”区分为parameter passing style,并引用自身(在the difference beteween classes and structs方面很重要)。
基本上,你不能直接做你想做的事。您可以创建一个Wrapper<T>
类,将ListField
设为Wrapper<List<T>>
并将引用(按值)传递给构造函数,但是您不能只使用ref
来执行你想要的。