Как правильно связать два класса в C # - PullRequest
0 голосов
/ 10 мая 2011

Я хочу что-то вроде этого

Class1 { DateTime time }
Class2 { List<Class1> }
Class3 : ObservableCollection<Class2> { }

, но я реализовал это:

Class1 { DateTime time }
Class2 { List<DateTime> }
Class3 : ObservableCollection<Class2> { }

с мыслью, что это экономит больше памяти.Атрибут времени каждого объекта уникален.Я знаю, что оба решения неверны, так как правильно связать эти два объекта?Могу ли я получить доступ к атрибутам Class1 через Class3?

РЕДАКТИРОВАТЬ: выше не фактический код, просто чтобы объяснить мою проблему.У классов есть другие атрибуты, и Class1 и Class2 используются и в других местах

Ответы [ 3 ]

2 голосов
/ 10 мая 2011

В вашем втором решении нет никакого способа добраться до любого экземпляра Class1 из Class3 с тем, что вы нам показали - вы можете иметь нагрузку Class3 и Class2 экземпляров, но никогда не создадите экземпляр Class1 вообще.

Если ваше первое решение представляет собой то, что вы логически хотите, почему бы не использовать его?

С другой стороны, если ваш код Class1 не имеет какого-либо состояния , кроме DateTime, нужно ли оно вообще для существования?

1 голос
/ 10 мая 2011

Во-первых, какую проблему вы пытаетесь решить? Сохранение памяти не проблема, которую я вижу здесь. Существуют ли миллионы создаваемых объектов, которые вынуждают вас принять это решение?

Если нет, рассмотрите наиболее читаемое / поддерживаемое решение из возможных. В противном случае не стесняйтесь размещать свою проблему, чтобы поместить ее в контекст для нас. Таким образом, мы можем присмотреться и дать лучший ответ.

0 голосов
/ 10 мая 2011

Если вы используете Class1 в других местах, то есть объекты уже существуют, то для их использования в списке не потребуется много памяти.Он будет хранить только указатель на объект (4/8 байт) вместо его копии.На самом деле, может потребоваться больше памяти, используя Список DateTime.

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

Что касается видимости из Binding.Если вы включите общедоступное свойство для объекта, вы сможете его увидеть.

Если ваша коллекция объекта Class1 может измениться, вам также следует рассмотреть возможность реализации ObservableCollection, чтобы сообщить WPF, когдаизменения коллекции.

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