I’m trying out the following code:
public partial class Test: Window
{
public Test(ref List</* Type */> LList)
{
[...]
this.ListField = LList;
}
private List</* Type */> ListField;
}
C# doesn’t save a reference in “ListField”.
Example:
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;
}
}
After having closed the form the Object given to public Test(ref List</* Type */> LList) has not changed (it’s not “null”).
SO how ca I save A reference in “ListField”?
(I’m sure this is a duplicate, but I suspect it would be hard to find examples due to terminology overloading.)
It definitely saves a reference in
ListField. That’s all it can do – the value ofListFieldcan only ever be a reference, becauseList<T>is a class.What it sounds like you really want is to keep the aliasing behaviour of
ref, but that only applies to parameters – never fields. It’s important to distinguish between “pass by reference” as a parameter passing style, and references themselves (important in terms of the difference beteween classes and structs).Basically, you can’t do what you want directly. You could create a
Wrapper<T>class, makeListFieldaWrapper<List<T>>and pass a reference (by value) into the constructor, but you can’t just userefto do what you want.