2013-03-18 2 views
0

Учитывая следующие:самосправочные переменные общие члены в VB.NET

Public MustInherit Class A(Of X As A(Of X, Y), Y As B(Of X, Y)) 
End Class 

Public MustInherit Class B(Of X As A(Of X, Y), Y As B(Of X, Y)) 
End Class 

Public Class D 

    Private _v As A(Of X As A(Of X, Y), Y AS B(Of X, Y))   

    Public Sub Initialize(Of X As A(Of X, Y), Y As B(Of X, Y))(ByVal v As A(Of X, Y)) 
     _v = v 
    End Sub 

End Class 

Можно ли определить переменную _V члена? Ключевое слово «As», по-видимому, не доступно при определении переменной-члена, поэтому приведенное выше не будет компилироваться, а компилятор жалуется, что слишком мало параметров типа.

+0

Как следует из (но, возможно, не достаточно четко) в ответ Джареда, проблема здесь не само-референциальности. Это означает, что * переменная * не может быть общей, а только классом (или методом). –

ответ

3

Использование As в параметрах общего типа устанавливает ограничение. Это можно сделать только в том месте, где определен параметр типа. В случае _v вы объявляете экземпляр определенного типа, возможно, используя существующие параметры типа. As в данный момент не является законным, поскольку вы не определяете параметры нового типа.

определить параметры на D и использовать их в декларации _v

+0

Другими словами, невозможно определить переменную-член '_v' как экземпляр класса' A', не определяя дополнительные ограничения на 'A' ​​через класс' D', даже через существенные ограничения уже определены в классе 'A определение? Кроме того, я так понимаю, вы могли бы сделать это в классе, определяемом как «Открытый класс A (Of X As C, Y As B (Of X))? – user1987824

Смежные вопросы