Можете ли вы изменить значение виртуального свойства в классе, в котором свойство впервые объявлено?

#c# #properties #virtual

#c# #свойства #виртуальный

Вопрос:

Теперь я знаю, что мог бы просто изменить его в производном классе, однако из-за контекста я не могу (это потребовало бы огромной модификации во многих других классах, если бы я это сделал). Мне нужно изменить значение этого свойства на основе чего-то, что я вычисляю в основном классе ПОСЛЕ инициализации его свойства в производном классе.

Обычное присвоение не работает. Кроме того, вы не можете получить ссылку на свойство C #. Я использую автоматические геттеры и сеттеры для свойств, я тоже пытался установить их по-старому, но безрезультатно.

 MainClass{
    protected virtual long virtualPropertyIWannaChange { get; set; }


    public changeVariable(List<long> thisListIsReadFromAFile){
         foreach (long value in thisListIsReadFromAFile){
            if(condition)
               virtualPropertyIWannaChange = someOtherValue;

         }
    }
}

ChildClass : MainClass{
    protected override long virtualPropertyIWannaChange => 1000;
}
  

Я хочу изменить значение виртуальной переменной в функции «changeVariable», если выполняется условие.
Если я назначу его таким образом, предупреждение не выдается, ошибка не выдается, но значение свойства фактически не изменяется. Любая помощь приветствуется, спасибо!

Комментарии:

1. Добро пожаловать в Stack Overflow. Пожалуйста, уделите некоторое время форматированию кода, который вы представляете — в данный момент его действительно трудно читать. Также было бы полезно, если бы вы предоставили для этого дополнительный контекст… почему вы хотите изменить значение виртуального свойства в ситуации, когда это свойство все равно не является «реализующим», потому что оно переопределено? Что заботится о значении и почему?

2. @JonSkeet Спасибо за приветствие. Мне нужно изменить его, чтобы приспособиться к ситуации, которая иногда возникает, когда первоначальное присвоение переменной (сделанное в дочернем классе) нуждается в небольшой коррекции. Это свойство используется в MainClass для многих вычислений, и оно является основным. Теперь я не могу просто выполнить эти вычисления с другой глобальной переменной, которая использует исправленное значение, поскольку свойство используется в других производных классах, и это означало бы изменение всего. Не могу дать такого большого контекста, так как это на работе и конфиденциально.

3. «Мне нужно изменить его, чтобы приспособиться к ситуации, которая иногда возникает, когда первоначальное присвоение переменной (сделанное в дочернем классе) нуждается в небольшой коррекции». Но вы присваиваете свойство — и значение, которое вы извлекаете из этого свойства, в любом случае будет извлечено из переопределяющей реализации. Было бы действительно полезно, если бы вы могли предоставить фактический код вместо псевдокода . То, что вы показали до сих пор, не будет компилироваться — и не следовать . СЕТЕВЫЕ соглашения об именовании также не помогают тем, кто пытается его прочитать.

4. По сути, если у вас есть переопределение getter, которое возвращает постоянное значение, вы ничего не можете сделать, чтобы изменить значение, возвращаемое этим свойством. Если вы не хотите возвращать постоянное значение, не реализуйте его таким образом,.