我有以下课程:
public class Red
{
public List<Blue> theList = new List<Blue>();
}
public class Blue
{
private Red origin;
public Blue(ref Red)
{
origin = Red;
}
public void SomeMethod()
{
origin.theList.Add(new Blue(ref origin));//When calling this, i get the error
}
}
现在它告诉我,我不能将原点作为参考(无论出于何种原因) 但我需要每个Blue实例都有一个红色参考。这样我就可以拥有它的实时版本,并且每个Blue实例都将访问当前版本的Red(不是副本)
所以我需要以下工作:
using System;
public static class Program
{
public static Main(string[] Args)
{
Red red = new Red();
red.Add(new Blue(ref red));
red.Add(new Blue(ref red));
red.[0].SomeMethod();
Console.WriteLine(red[0].origin.Count()); //Should be 2, because red was edited after the first blue instance was created
Console.ReadKey(true);
}
}
答案 0 :(得分:3)
您无需通过引用传递,因为您不需要修改red
的位置。
public class Red
{
public List<Blue> theList = new List<Blue>();
}
public class Blue
{
private Red origin;
public Blue(Red red)
{
origin = red;
}
public void SomeMethod()
{
origin.theList.Add(new Blue(origin));
}
}
由于Red
和Blue
为reference types,因此会传递其位置而非其值。
答案 1 :(得分:0)
实例上不需要ref
。它是同一个对象的参考。你需要ref和out来表示整数,字符串。在没有参考的情况下传递所有内容。