Я пытаюсь создать UserControl, унаследованный от универсального класса. Он наследуется не напрямую от универсального класса, а через промежуточный класс, который не использует универсальные шаблоны. Это компилируется и работает во время выполнения, но я получаю сообщение об ошибке во время разработки.
Вот мой общий родительский класс:
Public Class GenericParent(Of T)
Inherits UserControl
End Class
Вот мой неуниверсальный родительский класс:
Public Class NonGenericParent
Inherits GenericParent(Of String)
End Class
Вот мой XAML:
<local:NonGenericParent x:Class = "SilverlightApplication5.Page"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "clr-namespace:SilverlightApplication5"
Width = "400" Height = "300">
<StackPanel>
<Button Content = "Hello"/>
</StackPanel>
</local:NonGenericParent>
Парсер IntelliSense выдает следующие ошибки:
Как будто IntelliSense не видит дерево наследования за классом GenericParent. Я пробовал указать ContentPropertyAttribute непосредственно в классе SilverlightApplication5.Page, классе NonGenericParent, но это не работает.
Я читал, что атрибут TypeArguments не поддерживается в Silverlight 2.0. Вот почему я создал промежуточный класс NonGenericParent.
Если у кого-то есть идеи, как заставить замолчать эти ошибки, я был бы рад их услышать.
Обновлять: Мы открыли заявку в службу поддержки MSFT, я обновлю ее, добавив в нее решение.





Несмотря на то, что Silverlight находится на уровне 2.0 (и особенно настройки VS2008 для silverlight), они все еще очень молоды. В среде IDE все еще есть причуды.
У вас все еще есть проблема даже после успешной сборки?
Не уверен насчет silverlight, но он компилируется и работает как ожидалось в C#:
class GenericObject[T] : UserControl
{
}
class StaticObject : GenericObject[Int32]
{
public Int32 wide { get { return this.Width; } }
}
private void Form1_Load(object sender, EventArgs e)
{
StaticObject so = new StaticObject();
this.Text = so.wide.ToString();
}
Поэтому, если он компилируется с clr, он должен работать нормально.
Может быть, это просто ошибка intellisense, как вы предлагаете. Обычно я бы не советовал игнорировать предупреждения компилятора, но в этом случае кажется, что предупреждение недействительно.
edit: замененные угловые скобки квадратными скобками вызывают их удаление SO.
Я бы хотел иметь возможность просто подавить это сообщение, но я не знаю, как бы я это сделал. Согласно IntelliSense, на самом деле это ошибка, и именно так она отображается в окне «Список ошибок».
Мы получили сообщение от Microsoft, что это вряд ли будет исправлено в будущих версиях. После того, как они столкнулись с проблемой, связанной с попыткой найти ответственную группу, оказалось, что эта проблема принадлежит их группе разработчиков WPF, откуда пришел ответ «не собираюсь ее исправлять».
А пока мы обновили наш код, чтобы выдернуть дженерики из родительских классов, пока я не угадаю XAML 2009.
Это сообщение в блоге, похоже, связано с вашей проблемой:
Для Silverlight кажется, что у вас должно быть 3 класса, чтобы это работало.
Проблема временно исчезает после сборки, а затем, когда IntelliSense перехватывает резервную копию, ошибка появляется снова. На моей рабочей станции разработчика это занимает от секунды до 20 секунд. Пару раз я волновался, думая, что решил проблему только для того, чтобы она снова появилась после долгой задержки;)