Как указать ограничение типа и наследование при объявлении класса? - PullRequest
0 голосов
/ 13 марта 2012

У меня есть класс 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

Какой синтаксис?

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Попробуйте это:

public abstract class PostEvent<TPost> : IDomainEvent where TPost : Post, new() 

Вам не нужна запятая между списком интерфейсов и общими ограничениями.

1 голос
/ 13 марта 2012

Вам нужно реализовать его (вы не можете оставить реализацию чисто для конкретных типов - нужно знать, с чего начать):

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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...