Как бы вы подошли к этому дизайну? - PullRequest
0 голосов
/ 22 января 2009

У меня есть ControlA, который принимает IInterfaceB, который имеет свойство типа List<unknownType>

В случае ControlA мне нужно добавить новый экземпляр unknownType в список в IInterfaceB ...

unknownType нужны особые свойства, поэтому я сразу подумал, что это может быть интерфейс, но быстро реализованные интерфейсы не могут быть созданы ...

Как бы вы спроектировали эту систему?

РЕДАКТИРОВАТЬ текущая цепочка наследования выглядит следующим образом:

topLevelClass -> baseObject -> IBaseObject (which is implemented in topLevelClass)

поэтому, если бы я добавил новый класс в цепочку, он должен был бы выполнить наследование и реализацию, что было бы невозможно (afaik)

Ответы [ 4 ]

1 голос
/ 22 января 2009

Если я правильно интерпретирую это, вы можете добавить ограничение к unknownType для интерфейса, который содержит нужные вам свойства:

class ControlA
{
    void Frob<T>(IInterfaceB<T> something) where T : IHasSomeProperties, new()
    {
        something.ListOfT.Add(new T() { SomeProperty = 5 });
        something.ListOfT.Add(new T() { SomeProperty = 14 });
    }
}
0 голосов
/ 22 января 2009

Почему List должен быть неизвестным? Почему это не может быть реальный класс, у которого есть реальные свойства, которые вам нужны с конструктором, который вы можете создать? Если вам нужно расширить этот класс, вы можете наследовать его. Основываясь на информации, которую вы предоставляете, если все, что вам нужно, - это несколько свойств в классе, включенном в этот Список, то старый добрый класс должен сделать свое дело.

0 голосов
/ 22 января 2009

Ваша спецификация недостаточно конкретна, чтобы ответить хорошо, но попробуйте наложить ограничения на T.

public interface IInterfaceB<T>
    where T : new()
{
    List<T> Whatever { get; }
}

Это позволяет вам сделать это:

T iDoNotCare = new T();
0 голосов
/ 22 января 2009

Будет ли работать ограничение на тип?

List<T> where T : IInterface
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...