У меня есть класс WsEvent:
internal class WsEvent
{
public string Name { get; private set; }
public void Invoke() {}
}
И есть его обобщенный наследник:
internal class WsEvent<T> : WsEvent
{
public T EventData { get; private set; }
public void Invoke(T Data) {}
}
Я хотел бы скрыть метод Invoke() базового класса при использовании обобщенного класса. Сейчас IntelliSens подсказывает, что у экземпляра обобщенного класса есть перегруженный метод Invoke() и Invoke(T). Я хочу что бы был только Invoke(T).
Может быть подход целиком не правильный. Я в попытках методом тыка изучить обобщенные классы)
Выделите интерфейс:
interface IWsEvent
{
string Name { get; }
void Invoke();
}
interface IWsEvent<T> : IWsEvent
{
T EventData { get; }
void Invoke(T Data);
}
И реализуйте нужный метод явно:
class WsEvent : IWsEvent
{
public string Name { get; private set; }
public void Invoke() { }
}
class WsEvent<T> : IWsEvent<T>
{
public string Name { get; private set; }
void IWsEvent.Invoke() { } // <== явная реализация
public T EventData { get; private set; }
public void Invoke(T Data) { }
}
Скрыть базовые методы невозможно. Но можно не наследоваться от не-обобщенного типа ИЛИ можно ввести вместо этого 2 интерфейса - обобщенный и не-обобщенный. Старые типы при этом реализуют не-обобщенный интерфейс, новые - обобщенный. И интерфейсы уже наследуйте как хотите.
Например, MS для IEnumerable<T>
выбрали наследование от IEnumerable
. Но, так как вы хотите иное, то вы не должны так наследовать, и для вас обобщенный и не-обобщенный интерфейсы будут не связаны друг с другом.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Возникла необходимость нарисовать поверхность на основе примитивов (лаба по компьютерной графике)Поверхность рисуется в собственном контроле...
Есть ~100 файлов png нужно их как бы анимировать, весят они от 8кб до 4мб
Пытаюсь к инталлятору положить DotNetFX461Если не выполнять ни каких действий, то при сборке проекта ругается:
Друзья помогите побороть ошибку при отправке email , обычная форма обратной связи