Как указать ограничение типа и наследование при объявлении класса?
-
12-12-2019 - |
Вопрос
у меня есть abstract
класс, который имеет ограничение типа.Но я также хочу сделать abstract
класс реализует интерфейс.
Например:
public abstract class PostEvent<TPost> : IDomainEvent, where TPost : Post, new()
Который не компилируется.
Я не хочу этого:
public abstract class PostEvent<TPost> where TPost : Post, IDomainEvent, new()
Потому что это означает TPost : IDomainEvent
Я хочу PostEvent : IDomainEvent
Каков синтаксис?
Решение
Попробуй это:
public abstract class PostEvent<TPost> : IDomainEvent where TPost : Post, new()
Вам не нужна запятая между списком интерфейсов и общими ограничениями.
Другие советы
Вам нужно это реализовать (вы не можете оставить реализацию чисто к конкретным типам - нужно знать, с чего начать):
public abstract class PostEvent<TPost> : IDomainEvent
where TPost : Post, new()
{
public abstract void SomeInterfaceMethod();
}
Вы также можете использовать явную реализацию интерфейса и защищенный абстрактный метод, если вы не хотите, чтобы Otis использовался в общедоступном API:
public abstract class PostEvent<TPost> : IDomainEvent
where TPost : Post, new()
{
protected abstract void SomeInterfaceMethod();
void IDomainEvent.SomeInterfaceMethod() {
SomeInterfaceMethod(); // proxy to the protected abstract version
}
}
Не связан с StackOverflow