2012-03-12 3 views
0

У меня есть класс 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 Я хочу

Что синтаксис?

+0

у меня нет подстроено, чтобы проверить его на данный момент, но вы можете попробовать удалить запятую между '' IDomainEvent' и где '. – dasblinkenlight

ответ

3

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

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

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

1

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

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 
    } 
} 
Смежные вопросы