Biegam w błąd "Nie można odnosić się do instancji członka klasy spośród metody współdzielonej lub wspólnego inicjatora członka bez wyraźnej instancji klasy". Pracuję na aplikacji VB.NET MVC. Mam model, który ma właściwości bezpieczeństwa najwyższego poziomu zawarte w najwyższej klasy klasie, które powinny być dostępne do zajęć w tej klasie. Moje właściwości zawsze podążają za tą strukturą:

    Private _SecurityVar = Nothing
    Public Shared Property SecurityVar
        Get
            If _SecurityVar = Nothing Then
                _SecurityVar = User.IsInRole("SecurityFunction")
            End If
            Return _SecurityVar
        End Get
        Set(value)

        End Set
    End Property

Moim problemem jest to, że nie mogę uzyskać dostępu do _Securityvar b / c, nie jest udostępniany. Nie chcę _securityvar dostępny w moim widoku, tylko Securityvar. Potrzebuję wtedy, aby uzyskać dostęp do tych zmiennych na najwyższym poziomie z klas, które są zawarte w tej klasie, takich jak lista zamówień. Nie chcę po prostu powrócić użytkownika Co byłoby niezwykle nieefektywne, zwłaszcza jeśli chodzi o budowanie dużego stołu. Jak to się obejmuję, czy jest lepszy sposób?

1
Josh 16 luty 2017, 21:44

2 odpowiedzi

Najlepsza odpowiedź

Zamiast dzielić się ... sprawia, że twoje podklasy świadome ich pochodzenia.

W podklasie dodaj

Private myParent as <ParentClassName>
Public Sub New(Parent as <ParentClassName>)
   MyParent = Parent
End Sum

W klasie rodzicielskiej utwórz podklasę za pomocą

Dim Child as New <YourSubClassName>(Me)

Potem, kiedy potrzebujesz czegoś od rodzica w podklasie

Var = myParent.<Property Name>

Jeśli planujesz przenieść te podklasy wokół, musisz także dokonać publiczności _Parent lub dodać metodę, dzięki czemu można go zmienić później.

Jeśli nie chcesz zezwalać na podklasę pełny dostęp do klasy rodzicielskiej, możesz "grupa" współdzielone zmienne w innej klasie w rodzicach i przejść, że zamiast tego.

-1
Trevor_G 16 luty 2017, 21:19

Wystarczy też udostępnić swoją prywatną zmienną

Private Shared _SecurityVar = Nothing
0
Josh Part 16 luty 2017, 21:51