Я пытаюсь подклассифицировать объект Connection
для создания AuthenticatedConnection
, который должен функционировать таким же образом, как и Connection
, с добавлением токена. Прямым решением является передача «wrap» соединения с конструктором подкласса.Копирование защищенного поля в конструкторе подкласса
Это решение кажется сломанным, поскольку я не могу получить доступ к защищенному элементу параметра. Это означает, что базовый конструктор не может быть вызван. Есть ли способ реализовать конструкторы, чтобы можно было обернуть конструкторы так? Например: new AuthenticatedConnection("token", existingConnection)
Это текущая (прерванная) реализация. Ошибка компиляции является: Cannot access protected member 'Connection._client' via a qualifier of type 'Connection'; the qualifier must be of type 'AuthenticatedConnection' (or derived from it)
class Connection
{
// internal details of the connection; should not be public.
protected object _client;
// base class constructor
public Connection(object client) { _client = client; }
}
class AuthenticatedConnection : Connection
{
// broken constructor?
public AuthenticatedConnection(string token, Connection connection)
: base(connection._client)
{
// use token etc
}
}
Разве вы не можете просто установить его в конструктор? –
Шаблон Decorator может удовлетворить ваши потребности (http://www.codeproject.com/Articles/479635/UnderstandingplusandplusImplementingplusDecoratorp). По сути, вам нужен объект, который * имеет * a 'Connection' и * is * a 'Connection'. Это выполнимо, но вам придется «переслать» все методы, необходимые для правильного функционирования производного экземпляра, и это может стать беспорядочным. –