2009-05-22 2 views
1

Для нескольких типов объектов я бы предпочел инициализировать их только при необходимости (соединение по sql, соединения мэйнфреймов, большие формы), поскольку некоторые пользователи используют только определенные части программы (менеджеры могут использовать один мейнфрейм для выполнения что они хотят, обычные пользователи используют другой ресурс в первую очередь).Vb.net Как скрыть эту переменную от остальной части класса?

Почему p_? Я думаю, что использование p_ поможет мне не использовать или легко найти в intellisense переменную вместо свойства локально в этом классе. Затем, используя _ самостоятельно перед частными свойствами или частными переменными, которые не нуждаются в локальном доступе к свойству.

Что было бы хорошим способом предотвратить случайное обращение к p_dlgAdd напрямую? Это хорошее использование для анонимных переменных в 2008 году? (У меня еще нет работы на 2008 год, но они думают, что у нас скоро будет)

+0

жаль, что я пытался свободной форме, введите код, так что я не имел кучу моей реализации от моего фактического класса в пути. Не думал, чтобы просто вставить в окно Visual Studio и обратно. – Maslow

+0

Упс, похоже, я наступил на ваше редактирование. Сожалею. –

+0

любой, кто может комментировать, что может говорить об анонимных переменных возможностях здесь? – Maslow

ответ

2

Вы можете использовать EditorBrowseableAttribute, чтобы скрыть кого-то из Intellisense.

<EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)> _ 
Private p_dlgAdd As frmAdd = Nothing 

Другой вариант, который приходит на ум с помощью статического анализа, как Gendarme для проверки нарушения правила «не доступа к полю напрямую». Не уверен, что у жандарма уже есть соответствующее правило, но оно является расширяемым (однако, возможно, это не стоит усилий в вашем случае).

+0

Я думаю, что это две очень хорошие идеи, и их также можно комбинировать :-) –

+0

Я думаю, что они также неплохие идеи. Я собираюсь взять их и бежать с ними. – Maslow

0

Честно говоря, я не знаком с анонимными переменными. С учетом сказанного, действительно нет механизма, который я знаю, чтобы остановить вас от написания кода для доступа к частной переменной из одного класса. Просто обратите внимание на свой код. Если вы хотите наложить какой-то префикс на переменную, чтобы напомнить себе, это приемлемо.

0

То, что вы всегда можете сделать (но это может быть излишним в вашем случае), будет следующим:

public class Base 
{ 
    private frmAdd p_dlgAdd = null; 
    protected frmAdd _dlgAdd 
    { 
     get 
     { 
      if(p_dlgAdd == null) 
       p_dlgAdd = new frmAdd(); 
      return p_dlgAdd; 
     } 
    } 
} 

Таким образом, ваш «p_dlgAdd» не будет доступен и _dlgAdd только в производного класса. Но это работает, только если вы можете определить/изменить базовый тип.

+0

Да, но если вы посмотрите на его пример, он пытается запретить доступ частной переменной из своего собственного класса, а не к классу потребления. – NYSystemsAnalyst

+0

Да, я знаю, что он пытается защитить переменную неправильного внутреннего использования. Но в том случае, если он действительно хочет его защитить, он может создать (возможно, абстрактный) базовый класс, который обеспечивает его функциональность для супервизора и инкапсулирует переменную. Это в основном зависит от того, насколько большой и сложный класс, и имеет ли он несколько случаев такой переменной. И, конечно, это не всегда возможно. –

0

Это то, что Статический для.

Public Class frmMain 
    Public ReadOnly Property _dlgAdd As frmAdd 
     Get 
      Static dlgAdd As frmAdd = Nothing 
      If dlgAdd Is Nothing Then 
       dlgAdd = New frmAdd() 
      End If 
      Return dlgAdd 
     End Get 
    End Property 

    Public Sub DoStuff() 
     ' cannot touch dlgAdd 
    End Sub 
End Class 

https://msdn.microsoft.com/en-us/library/z2cty7t8.aspx

+0

Разве это не в основном реализация Singleton? Есть ли какая-либо понимаемая связь между шаблоном проектирования Creation и доступностью? – 2015-07-22 19:59:01

+0

Я просто отвечал на вопрос, как его спрашивали. «Static» - похмелье от VB6, и я бы никогда не использовал его, чтобы быть честным. https://msdn.microsoft.com/en-us/library/z2cty7t8.aspx –

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

  • Нет связанных вопросов^_^