Как скрыть методы от базового класса? - PullRequest
1 голос
/ 26 января 2011

Я использую класс ActiveRecordBase Castle Active Record в качестве базового класса для моих объектов БД.Это позволяет мне воспользоваться преимуществами AR-паттернов, например:

MyClass clas = new MyClass();
clas.Number = 5;
clas.Save();

Проблема в том, что для некоторых объектов я хочу скрыть эти методы.Как я могу это сделать?Я не использую интерфейсы для этих объектов.

Edit1: Чтобы сделать это более ясным: я хочу, чтобы 10 классов наследовали от базового, но 3 из них не должны раскрывать некоторые методы изБазовый класс.Так, например, для MyClassB это:

MyClassB clasB = new MyClassB();
clasB.Number = 5;
clasB.Save();

не должно быть возможным - этот объект НЕ ДОЛЖЕН сохранять ().

Edit2: я прочитал c # скрывает от дервидированных классов некоторые свойства базового класса .Я согласен, что это плохой подход, но имейте в виду, что я должен использовать ActiveRecordBase, который я не могу просто изменить (по крайней мере, если я хочу придерживаться исходных источников Castle Active Record).

Ответы [ 2 ]

3 голосов
/ 26 января 2011

Вы этого не делаете.

Вы реструктурируете свой дизайн так, чтобы 7 объектов наследовали от одного объекта, который предоставляет желаемую функциональность, остальные 3 наследуют от одного, который этого не обеспечивает, ивсе они наследуются от основного «основного» объекта.Думайте об этом как о дереве.Вместо того, чтобы пытаться скрыть листья из поля зрения, вы просто меняете местоположение ветки.Я не уверен, что эта аналогия работает, но давайте представим, что она работает.

3 голосов
/ 26 января 2011

Если вы хотите скрыть их, вероятно, они не принадлежат к этому базовому классу. Я предлагаю расширить иерархию наследования для достижения этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...