Может ли визуальный дизайнер студии показывать классы, наследующие универсальные типы?
Я пытаюсь очистить все ошибки конструктора в наших решениях и столкнулся со следующей ошибкой:
Невозможно отобразить конструктор для этого файла, поскольку ни один из классов в нем не может быть спроектирован. Разработчик проверил следующие классы в файле: DoubleAttributeTextBoxBase --- Не удалось загрузить базовый класс 'NumericAttributeTextBoxBase'. Убедитесь, что на сборку ссылались и все проекты были построены.
Оба класса определены в одной сборке, так что я знаю, что это не ссылочная проблема. Мне интересно, связано ли это с тем, что базовый класс является универсальным. Есть идеи?
public class DoubleAttributeTextBoxBase : NumericAttributeTextBoxBase<double>
public class NumericAttributeTextBoxBase<T> : TextBox where T : IComparable, IComparable<T>
2 ответа
Базовый класс для разрабатываемого класса должен быть неабстрактным и неуниверсальным. Сделать класс, который наследуется от универсального класса, для разработки. Обходной путь должен вставить промежуточный неуниверсальный класс между:
public partial class DoubleAttributeTextBoxBase
: NumericAttributeTextBoxBaseOfDouble
{
public DoubleAttributeTextBoxBase()
{
InitializeComponent();
}
// Now DoubleAttributeTextBoxBase is designable.
}
public class NumericAttributeTextBoxBaseOfDouble
: NumericAttributeTextBoxBase<double>
{
}
Чтобы сделать это максимально простым, вы можете даже поместить неуниверсальный класс в тот же файл, что и класс, который вы хотите создать. Просто убедитесь, что поместили его после класса (как я делал выше), потому что дизайнер ожидает, что первый класс в файле будет тем, который разрабатывается.
Я не знаю решения, это было серьезным ограничением Visual Studio с момента выхода C# 2.0. Единственное, что я могу сказать, это добавить этот элемент управления на страницу во время выполнения, тогда, по крайней мере, вы сможете вернуть дизайнера для всего остального.
из MSDN:
Ваш компонент или элемент управления не может быть универсальным типом, который также называется типом шаблона или параметризованным типом. Среда разработки не поддерживает универсальные типы.