Привет всем!
Ситуация
public class BaseClass
{
public virtual string Prop1{get;set;}
}
public class ChildClass:BaseClass
{
public override string Prop1
{
get{return "hello";}
set{//Тут надо запретить изменять значение!}
}
}
Как можно, и можно ли вообще, запретить изменять значение св-ва Prop1 в дочернем классе?
Необходимо это видеть на этапе компиляции, как например [Obsolete].
или еще лучше, если при создании объекта этого поля не будет видно вообще.
Здравствуйте, mrjeka, Вы писали:
M>или еще лучше, если при создании объекта этого поля не будет видно вообще.
А я приведу к базовому типу и всё равно вызову сеттер

Бросайте в нём InvalidOperationException и задокументируйте...
Здравствуйте, Пельмешко, Вы писали:
M>>или еще лучше, если при создании объекта этого поля не будет видно вообще.
П>А я приведу к базовому типу и всё равно вызову сеттер
П>Бросайте в нём InvalidOperationException и задокументируйте...
Ну InvalidOperationException или NotSupportedException все равно будут поставлены. Просто можно ли скрыть как-нибудь это поле? пробовал [Browsable(false)], не помогает.
Здравствуйте, Аноним, Вы писали:
А> public class BaseClass
А> {
А> public virtual string Prop1 { get; private set; }//
Ну это же бред!
//а если в одном из наследников сеттер разрешен???
А> }
И вообще с доступом разрулил. (через new )
Здравствуйте, mrjeka, Вы писали:
M>Как можно, и можно ли вообще, запретить изменять значение св-ва Prop1 в дочернем классе?
M>Необходимо это видеть на этапе компиляции, как например [Obsolete].
M>или еще лучше, если при создании объекта этого поля не будет видно вообще.
Вы нарушаете очень важный принцип ООП —
LSP.
Производный класс не должен отличаться по принципам работы с ним от базового.
На этапе компиляции часто неизвестно какой конкретно тип находится в переменной типа BaseClass, соответственно
и программист не всегда это знает. Ему придется писать разную логику работы для разных потомков, что сводит на нет
преимущества наследования.
Скорее всего наследование применено здесь не по месту.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>