Условно я хотел бы присвоить это свойство/поле как ссылку на то же свойство/поле другого экземпляра того же класса.
Важно отметить, что мне необходимо прочитать поле, на которое указывает ссылка. Написать ему было бы бонусом, а не проблемой и не обязательно.
Я хотел бы знать, можно ли будет использовать поле ref и сделать что-нибудь логика внутри метода получения свойств.
Кроме того, я знаю, что здесь, на StackOverflow, было несколько вопросов по этому поводу (здесь, здесь, здесь, здесь), но все они довольно старые (поэтому идея дублирования сюда не применима).
Сейчас мы работаем на C# 10.0, и было реализовано множество различных возможностей ref, например ref locals. Я пытался использовать некоторые из них, но мне это не удалось. Надеюсь, кто-нибудь, обладающий большими знаниями, поможет мне найти способ сделать это.
Итак, возможно ли без использования оболочки связать свойство одного экземпляра с другим?? (это мой нынешний подход, подробно описанный ниже)
Подробнее:
Это мой класс (на самом деле это его сильное упрощение):
Код: Выделить всё
public class Person
{
private string _fullName;
public string FullName { get => _fullName; set => _fullName = value; }
}
Код: Выделить всё
var person01 = new Person() { FullName = "Steve" };
var person02 = new Person() { FullName = "Mr. S" };
var person03 = new Person() { FullName = "Mister Steve" };
person02.FullName = person01.FullName;
// person02.FullName is "Steve"
person01.FullName = "Mr. Steve Jobs";
// person01.FullName is "Mr. Steve Jobs"
// person02.FullName is "Steve" because the value was only copied.
Код: Выделить всё
ref person02.FullName = ref person01.FullName; // not allowed
ref person03.FullName = ref person02.FullName; // not allowed
person01.FullName = "Mr. Steve Jobs";
// person01.FullName is "Mr. Steve Jobs"
// person02.FullName is "Mr. Steve Jobs"
// person03.FullName is "Mr. Steve Jobs"
Итак, я сделал это, это работает, но это некрасиво:< /p>
Код: Выделить всё
public class Person
{
private string _fullName;
public string FullName
{
get => (FullName_Reference == null ? _fullName : FullName_Reference.FullName);
set => _fullName = value;
}
public Person FullName_Reference { get; set; }
public Person()
{
_fullName = "";
FullName_Reference = null;
}
}
var person01 = new Person() { FullName = "Steve" };
var person02 = new Person() { FullName = "Mr. S" };
var person03 = new Person() { FullName = "Mister Steve" };
person02.FullName_Reference = person01;
person03.FullName_Reference = person02;
person01.FullName = "Mr. Steve Jobs";
// person01.FullName is "Mr. Steve Jobs"
// person02.FullName is "Mr. Steve Jobs"
// person03.FullName is "Mr. Steve Jobs"
Подробнее здесь: https://stackoverflow.com/questions/713 ... field-like