1
Public Class frmMain
    Private p_dlgAdd As frmAdd = Nothing
    Public ReadOnly Property _dlgAdd As frmAdd
        Get
            If p_dlgAdd Is Nothing Then
                p_dlgAdd = New frmAdd()
            End If
            Return p_dlgAdd
        End Get
    End Property

    Public Sub DoStuff()
       ''// Should not touch p_dlgAdd
    End Sub
End Class

对于几种类型的对象,我宁愿只在需要时才初始化它们(sql 连接、大型机连接、大型表单),因为有些用户只使用程序的非常特定的部分(经理可能会使用一台大型机来做他们想做的事情,定期用户主要使用其他资源)。

为什么是 p_?我在想使用 p_ 将帮助我在智能感知中不使用或轻松找到该类中本地的变量而不是属性。然后在私有属性或不需要属性本地访问的私有变量前面单独使用 _ 。

什么是帮助防止我意外直接访问 p_dlgAdd 的好方法?这对 2008 年的匿名变量有用吗?(我还没有 2008 年可用,但他们认为我们很快就会有)

4

4 回答 4

2

您可以使用EditorBrowseableAttribute对 Intellisense 隐藏类成员。

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

想到的另一个选择是使用像宪兵这样的静态分析工具来检查是否违反了“不要直接访问该字段”规则。不确定 Gendarme 是否已经有适当的规则,但它是可扩展的(但在您的情况下可能不值得付出努力)。

于 2009-06-01T23:46:51.730 回答
0

老实说,我不熟悉匿名变量。话虽如此,我所知道的确实没有任何机制可以阻止您编写代码以从同一类中访问私有变量。请注意您的代码。如果你想在变量上加上某种前缀来提醒自己,那是可以接受的。

于 2009-05-22T12:17:19.907 回答
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 只能在派生类中访问。但这仅在您可以定义/更改基本类型时才有效。

于 2009-05-22T12:22:30.193 回答
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

于 2011-08-05T01:41:01.447 回答