Как указать ограничение типа и наследование при объявлении класса?

StackOverflow https://stackoverflow.com//questions/9676467

Вопрос

у меня есть 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
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top