Есть ли в любом случае создать динамически извлекаемый метод, который каким-то образом отслеживает состояние объекта, но должен вызываться только один раз и обновит свой результат, как только состояние объекта, которое он наблюдает, было изменено или изменено каким-либо образом, который не был ' t равно состоянию, в котором оно находилось до того, как был вызван метод.
У меня есть сценарий, иллюстрирующий мою точку зрения:
bool isNull = false;
Object obj = new Object();
isNull = (bool)obj.ExtNull();
string reply = TestMethodA(isNull);
Console.WriteLine("Is object null? Answer: {0}. State of isNull: {1}", reply, isNull);
obj = null;
Console.WriteLine("\n\nNulling object... ");
Console.WriteLine("\n\nNew answer: ");
Console.WriteLine("\n\nIs object null? Answer: {0}. State of isNull: {1}", reply, isNull);
Console.Read();
}
public static string TestMethodA(bool isNull)
{
string str;
if (isNull)
str = "yes";
else
str = "no";
return str;
}
Как мы видим, объект вызывает метод расширения, приведенный к типу bool, который соответствует типу возврата метода. Этот оператор затем присваивается переменной bool isNull.
Затем вызывается строка и назначается TestMethodA, который передает isNull в качестве аргумента. Как только isNull получен в параметре метода, он анализирует, является ли логическое значение истинным или ложным. Если это правда (это означает, что объект имеет значение null), строковая переменная, вызываемая в методе, принимает значение «да» в качестве значения. Аналогично, если нет, потребуется «нет».
Затем строка возвращается и передается методу. И строка, и логическое значение публикуются в методе Console.WriteLine.
После того, как это произойдет, ссылочная переменная obj присваивает себе значение null, теряя когда-то имеющуюся ссылку.
Затем оператор WriteLine публикует то же выражение, что и раньше, анализируя логическое значение и состояние объекта. Конечно, несмотря на то, что состояние объекта теперь нулевое,
Итак, поскольку в C # на самом деле нет указателей (действительно позор, теперь, когда я об этом думаю) без небезопасного кода, есть ли способ достичь этого динамически?