【发布时间】:2018-08-28 16:52:36
【问题描述】:
public class Program
{
public static void Main()
{
Test[] tests = new Test[5];
tests[0] = new Test(){Name = "A"};
var consumer = new Consumer();
consumer.test = tests[0];
Console.WriteLine(consumer.test.Name); //Prints A
tests[0] = new Test(){Name = "B"};
Console.WriteLine(consumer.test.Name); //Would like this to point to new object and print B
}
}
class Test
{
public string Name {get; set;}
}
class Consumer
{
public Test test {get; set;}
}
我想知道是否可以直接在 c# 中实现这种功能。换句话说,Consumer.test 是否有可能指向位于 tests[0] 中的任何 Test 实例,这样当数组元素值发生变化时,我仍然可以访问该新值。或者,换一种说法,是否可以持有对对象实例引用的引用?我知道一种解决方法是创建一个容器类来保存对 Test 对象的引用并传递它,但是我想知道是否可以直接这样做。
【问题讨论】:
-
我首先要问你为什么要这样做?你想解决什么问题?您可能有一些方法可以解决这个问题,但它们可能带来的麻烦多于其价值。
-
你可以将它包裹在另一个对象中,但我真的认为这是一个 X-Y 问题。
-
你为什么不能再打电话给
consumer.test = tests[0];?这将满足您的第二条评论。 -
例如,您可以将
Consumer.test设为Func<Test>而不是Test,但它可能会变得非常丑陋。 -
不能直接做;您必须创建一个表示间接操作的类型。
标签: c#