Средства управления со строгим контролем типов в.NET

for (int[] a : myArray) {
    for (int b : a) {
         p = p + b;

    }
}

Ну, проблема в том, что это массив int, а не просто int.

8
задан 2 revs 14 September 2009 в 09:46
поделиться

6 ответов

В то время как критика "не использовала дженериков", не может быть справедливо применен к средствам управления, разработанным перед их существованием... нужно задаться вопросом о средствах управления WPF (новый в.NET 3.0 после дженериков в.NET 2.0).

Я проверил метод AddChild в ComboBox. Это берет параметр объекта (тьфу).

Это управление предназначается, чтобы использоваться, прежде всего, через XAML. Это было сделано этот путь, потому что нет никакого способа указать параметр типа в XAML? (в стороне нет ли никакой способ указать параметр типа в XAML?)

Извините, что имел не категоричный "Почему" ответ, просто совместно использовав общее страдание необходимости бросить при работе с UI.

3
ответ дан 5 December 2019 в 20:20
поделиться

Я не думаю, что Вы пропускаете что-либо. Это просто, что эти классы были созданы назад в дни перед дженериками, и WinForms является просто не достаточно лезвием для MS для пребывания в течение большого количества времени, изменяясь или расширяя API.

1
ответ дан 5 December 2019 в 20:20
поделиться

Я часто создаю классы обертки для средств управления. Это позволяет мне использовать дженерики. Это часто в сочетании с Отражением, которое не безопасно с точки зрения типов во время компиляции, но может быть во время выполнения.

1
ответ дан 5 December 2019 в 20:20
поделиться

Общий источник этой проблемы, я думаю, не разделяет Ваше представление/логику представления от Вашей логики модели данных в оперативной памяти. Который, к сожалению, является отказом архитектуры, в котором WinForms и Visual Studio разработчик GUI замешаны.

WinForms и разработчик VS не поощряют программиста разделять управление их объектами данных от самих классов формы. Вероятно, было бы лучше, если бы объекты ComboBox ListViewItem не предложили поддержки произвольных объектов, или через дженерики или через Объектные наборы..

Если Вы не взламываете вместе что-то вроде ограниченного использования и время жизни, необходимо постараться не хранить ссылки на отдельные объекты данных прямо в средствах управления или формах. Ими нужно управлять отдельно, и если на них нужно сослаться, это должно быть сделано через образцовый класс управления, разработанный для конкретного типа класса представления, с которым Вы работаете.

Бандаж простого выхода для проблемы, тем не менее, мог бы быть должен "отобразить" текстовые представления, которые Вы помещаете в ComboBox или ListView к исходным объектам, с помощью члена поля Словаря на классе Формы. Это не идеальное решение, но дает Вам, по крайней мере, полушаг косвенности между Вашими данными и Вашими средствами управления UI, которые могут сделать Ваш код легче поддержать.

Править: Это является по общему признанию отдельным от класса ListViewItemCollection, выставляющего Экземпляры объектов... Официальная защита, вероятно, будет состоять в том, что они хотели поддерживать стандартный IEnumerable и интерфейсы ICollection. Но нет никакой причины, которую они, возможно, не также обеспечили определенным для типа переопределениям этих методов, так как это разработано явно для хранения экземпляров ListViewItem. Таким образом, у меня нет ответа для Вас по тому конкретному вопросу.

1
ответ дан 5 December 2019 в 20:20
поделиться

Ну, если Вы связываете с данными свои средства управления к DataBindingSource, можно достигнуть данные тот путь, но AFAIK это все еще не со строгим контролем типов. При отображении нескольких параметров/аспектов единственного бизнес-объекта можно связать с этим, то получают доступ участники (со строгим контролем типов) вместо этого - конечно, это все возвращается к ответу Бурного Интеллекта, который является лучшим разделением между моделью и представлением. Однако, я соглашаюсь, что универсальный ввод помог бы.

1
ответ дан 5 December 2019 в 20:20
поделиться

Это возможно (можно сделать собственные универсальные средства управления, если Вы желаете), но конструктор форм, который идет с Visual Studio, будет волноваться, если Вы сделаете это. Необходимо будет сделать материал без него.

Вы не первый, который будет думать об этом, и Microsoft уже получила справедливую долю критики от общественности для этого. Давайте надеяться, что они добавляют поддержку этого в будущем.

1
ответ дан 5 December 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: