Может ли визуальный дизайнер студии показывать классы, наследующие универсальные типы?

Я пытаюсь очистить все ошибки конструктора в наших решениях и столкнулся со следующей ошибкой:

Невозможно отобразить конструктор для этого файла, поскольку ни один из классов в нем не может быть спроектирован. Разработчик проверил следующие классы в файле: 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:

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

http://msdn.microsoft.com/en-us/library/ms171843.aspx

Другие вопросы по тегам