Где Generi c T - реализация абстрактного класса - PullRequest
2 голосов
/ 20 июня 2020

Учитывая следующие классы и иерархию:

public abstract class AbsractClass<T>
{ 
    public T Id { get; private set; }
}

public class ImplementationA : AbsractClass<Guid> { }

public class ImplementationB : AbsractClass<int> { }

Какое ограничение я должен использовать в , где предложение / ограничение, чтобы указать, что generi c T должно быть реализацией AbsractClass. Это будет означать, что Entity примет либо реализацию A, либо реализацию B.

public abstract class Entity<T> // where : T ?
{ 
}

Возможно ли это, или мне следует использовать вместо этого интерфейсы?

1 Ответ

6 голосов
/ 20 июня 2020

Вам нужно добавить два параметра generi c, чтобы он работал:

public abstract class Entity<T, TKey>  where T : AbstractClass<TKey>
{
}

Generi c интерфейсы будут вести себя точно так же.

...