Цикл дочерних классов универсального класса - PullRequest
2 голосов
/ 27 октября 2011

Я не знаю, как именно это объяснить, но я все равно пойду.

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

public abstract class BaseControl<T> : UserControl where T : BaseClass, new()
{

}

Цель базового элемента управления - редактировать свойства дочерних элементов BaseClass.

Тогда у меня есть пара элементов управления, аналогичных приведенным ниже

public partial class MyControl : BaseControl<MyClass>
{
}

«MyClass»наследует BaseClass.

Допустим, у меня есть MyControl и другие похожие на него, используемые на странице.Могу ли я сделать что-то вроде следующего, чтобы получить все элементы управления, которые наследуются от BaseClass?

foreach(BaseControl<T> c in this.Controls)
{
    //do stuff
}

1 Ответ

3 голосов
/ 27 октября 2011

Не ужасно легко.Было бы проще, если бы у вас был неуниверсальный BaseControl, который BaseControl<T> унаследовал от:

public abstract class BaseControl : UserControl {}

public abstract class BaseControl<T> : BaseControl where T : BaseClass, new()

, тогда

foreach(BaseControl c in this.Controls.OfType<BaseControl>())
{
    //do stuff
}

Вы можете поместить любые элементы, которые не делали't зависит от T и в неуниверсальном классе.

Кроме этого, вы могли бы изучить иерархию типов каждого элемента управления и посмотреть, использует ли какой-либо из нихуниверсальная или неуниверсальная форма BaseControl<T>, но это было бы несколько сложнее, чем эта.

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