Я бы сказал, что если у вас есть кодовая база, с которой вы хотите это сделать, это не лучшая разработанная база кода. Обычно это признак класса на одном уровне иерархии, требующей определенной публичной подписи, тогда как другой класс, полученный из этого класса, не нуждается в этом.
Предстоящая парадигма кодирования называется «Композиция над наследством». Это напрямую связано с принципами объектно-ориентированного развития (особенно принципа единой ответственности и открытого/закрытого принципа).
К сожалению, способ, которым многие из нас были обучены объектной ориентации, мы создали привычку сразу думать о наследовании, а не о композиции. Мы склонны иметь более крупные классы, которые имеют много разных обязанностей, просто потому, что они могут содержаться с одним и тем же объектом «Реальный мир». Это может привести к иерархиям классов, которые имеют глубину более 5 уровней.
Несчастливый побочный эффект, который разработчики обычно не думают при работе с наследованием, заключается в том, что наследование образует одну из самых сильных форм зависимостей, которые вы когда-либо могли ввести в свой код. Ваш производный класс теперь сильно зависит от класса, на который он был унаследован. Это может сделать ваш код более хрупким в долгосрочной перспективе и привести к запутыванию проблем, при которых изменение определенного поведения в базовом классе нарушает производные классы в неясных способах.
Один из способов взломать код через интерфейсы, как указано в другом ответе. Это разумная вещь, чтобы сделать так или иначе, поскольку вы хотите, чтобы внешние зависимости класса привязывались к абстракциям, а не к конкретным/производным типам. Это позволяет изменять реализацию без изменения интерфейса, без изменения строки кода в зависимом классе.
Я бы предпочел не поддерживать систему с сотнями/тысячами и даже более небольшими и слабо связанными классами, чем с системой, которая сильно использует полиморфизм/наследование и имеет меньшее количество классов, которые более плотно в сочетании.
Возможно, best Ресурс для объектно-ориентированного развития - это книга Роберта К. Мартина, Agile Software Development, Principles, Patterns, and Practices.
Если вы используете DerivedClass d = новые DerivedClass(); d.A(), вы все равно сможете получить доступ к реализации базового класса A(). – 2008-09-19 23:41:17
Хорхе, я просто попробовал это, и, как указал Брайан, А и Б все равно будут выставлены. – Lyndon 2008-09-19 23:42:44
http://msdn.microsoft.com/en-us/library/aa691135(VS.71).aspx – 2008-09-19 23:44:10