Допустим, я хочу указать, какую реализацию универсального интерфейса использовать в моем классе. Это просто (если немного уродливо), если класс использует его для хранения другого открытого типа:
class Foo<T> where T : IList<Bar>, new()
{
private T _list = new T();
}
class Bar{}
Затем мы можем создать новый экземпляр foo: new Foo<List<Bar>>()
Но что происходит Bar
- это частный класс в Foo
:
class Foo<T> where T : IList<Bar>, new()
{
private T _list = new T();
class Bar{}
}
Очевидно, что это не удается, потому что Foo
не может выставить Bar
в ограничениях его типов, и нет способа создать экземпляр new Foo<List<Bar>>()
Я мог бы придерживаться разоблачения object
:
class Foo<T> where T : IList<object>, new()
{
private T _list = new T();
class Bar{}
}
Но затем я использую object
до Bar
каждый раз, когда использую интерфейс.
Какой мой лучший вариант здесь?