2017-02-16 3 views
1

Я продолжаю работать с ошибкой «Нельзя ссылаться на член экземпляра класса из совместно используемого метода или инициатора разделяемого члена без явного экземпляра класса». Я работаю над приложением VB.NET MVC. У меня есть модель, которая обладает свойствами безопасности верхнего уровня, содержащимися в классе верхнего уровня, которые должны быть доступны классам этого класса. Мои свойства всегда следуют этой структуры:Свойства в вложенных классах в VB.NET

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 

Моя проблема заключается в том, что я не могу получить доступ к _SecurityVar б/с, что не разделяет. Я не хочу, чтобы _SecurityVar был доступен в моем представлении, просто SecurityVar. Затем мне нужно получить доступ к этим переменным верхнего уровня из классов, которые содержатся в этом классе, например список заказов. Я не хочу просто возвращать User.IsInRole («SecurityFunction»), потому что я бы несколько раз ударил базу данных; что было бы крайне неэффективно, особенно когда речь заходит о создании большого стола. Как мне обойти это, есть ли лучший способ?

+0

Я считаю, что лучший способ сделать это, чтобы сделать подклассы «Aware» их родителей. Разделение - это очень слабое и, на мой взгляд, плохое программирование. –

+0

Что-то в твоем дизайне не стало для меня естественным, но я не могу придумать разумный способ рассказать тебе «почему», зная об этом больше или рассказывая о том, чтобы переделать все это. Из-за этого: вам просто нужно сделать так, чтобы вы «Private _SecutiryVar» тоже –

ответ

-1

Вместо того, чтобы делиться. Сделайте свои подклассы осведомленными о своем происхождении.

В подклассе добавить

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

В родительском классе создать подкласс, используя

Dim Child as New <YourSubClassName>(Me) 

Затем, когда вам нужно что-то из родителей в подклассе

Var = myParent.<Property Name> 

Если у вас план перемещения этих подклассов вокруг вас также должен сделать _Parent Public или добавить метод, чтобы вы c изменить его позже.

Если вы не хотите, чтобы подкласс имел полный доступ к родительскому классу, вы можете «группировать» ваши общие переменные в другом классе родителя и передавать это вместо этого.

+0

Это работало после того, как я переключил несколько вещей вокруг. Почему его проголосовали? Что не так с этим подходом? – Josh

+0

Я был жертвой тролля. Несколько моих должностей проголосовали через минуту или около того. –

+0

Не забудьте принять ответ, пожалуйста. –

0

Просто сделать вашу приватная переменная разделяет слишком

Private Shared _SecurityVar = Nothing 
+0

Это то, что я делал, но я не хотел, чтобы _SecurityVar был доступен в моих представлениях. – Josh

+0

Это 'Private', это ** не должно быть ** доступно нигде, кроме этого класса, даже если его общий. –

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