Хранить ссылку на свойство объекта в переменной

В C# есть ли способ сделать что-то вроде следующего:

class A
{
    public int X { get; set; }
}

class B
{
    public /* ? */ OtherX;
}

var a = new A();
var b = new B();
b.OtherX = //?a.X?;
b.OtherX = 1; //sets a.X to 1
int otherX = b.OtherX //gets value of a.X

не прибегая к этому:

class B
{
    public Func<int> GetOtherX;
    public Action<int> SetOtherX;
}

var a = new A();
var b = new B();
b.GetOtherX = () => a.X;
b.SetOtherX = (x) => a.X = x;

?

1 ответ

Решение

Нет, вы не можете сделать это так, как вы описали, так как нет ref int типа, но вы можете поместить обертку вокруг него, чтобы обе переменные указывали на один и тот же объект, который содержит ваше значение.

public class Wrapper<T>
{
   public T Value {get; set;}
}

public class A
{
   public Wrapper<int> X {get; set;}

   public A()
   {
       X = new Wrapper<int>();
   }
}

public class B
{
   public Wrapper<int> OtherX {get; set;}
}

var a = new A();
var b = new B();
b.OtherX = a.X;
b.OtherX.Value = 1; //sets a.X to 1
int otherX = b.OtherX.Value //gets value of a.X
Другие вопросы по тегам