Re[17]: Override для произвольного метода.
От: 4058  
Дата: 11.12.08 10:06
Оценка: 7 (2) +1
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Вот, например класс CStringEx — расширяет стандартный класс CString из MFC


1. System.String в отличие от CString иммутабелен, в частности по этому класс запечатан.

Пример:


class PDString : String
{
    bool MySuperFunc();    
}


PDString pds ...;
... pds.Replace('asdas', 'asdasd')

— вуалья, возвращается System.String.
Я думаю дальше не имеет смысла описывать суть проблемы, наследования от иммутабельных классов.

2. Переопределенные операторы не наследуются (как минимум прийдется переопределить операторы конкатенации).

3. В вашем случае задача не решается агрегацией (т.к. (1) и как вы правильно заметили прийдется педалить весь интерфейс System.String), а решается предположенным вам сервисным классом, который предоставляет необходимую функциональность. В данном случае это самый лучший вариант.

P.S. Наследование с целью расширения функциональности достаточно распространенная ошибка, об этом еще давно Страуструп упонинал в своей немногочисленной литературе.
мой первый супер string
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.