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

一部のユーザーはプログラムの非常に特定の部分のみを使用するため (管理者は 1 つのメインフレームを使用して、必要なことを行うことができます)ユーザーは主に別のリソースを使用します)。

なぜ p_? p_ を使用すると、そのクラスでローカルにプロパティの代わりに変数を使用したり、インテリセンスで簡単に見つけたりするのに役立つと思います。次に、プロパティによってローカルにアクセスする必要のないプライベート プロパティまたはプライベート変数の前に _ だけを使用します。

誤って p_dlgAdd に直接アクセスするのを防ぐにはどうすればよいでしょうか? これは 2008 年の無名変数の適切な使用法ですか? (私はまだ 2008 を職場で利用できませんが、彼らはすぐに利用できると考えています)

4

4 に答える 4

2

EditorBrowseableAttributeを使用して、Intellisense からクラス メンバーを非表示にすることができます。

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

頭に浮かぶもう1つのオプションは、Gendarmeのような静的分析ツールを使用して、「フィールドに直接アクセスしない」ルールの違反をチェックすることです. Gendarme に既に適切なルールがあるかどうかはわかりませんが、拡張可能です (ただし、あなたのケースでは努力する価値がないかもしれません)。

于 2009-06-01T23:46:51.730 に答える
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

正直なところ、私は無名変数に詳しくありません。そうは言っても、同じクラス内からプライベート変数にアクセスするコードを書くのを止めるメカニズムは、私が知っているものではありません。コードに注意してください。思い出させるために変数に何らかのプレフィックスを付けたい場合は、それで問題ありません。

于 2009-05-22T12:17:19.907 に答える
0

これがStaticの目的です。

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 に答える