Здравствуйте, 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. Наследование с целью расширения функциональности достаточно распространенная ошибка, об этом еще давно Страуструп упонинал в своей немногочисленной литературе.