1

私の質問に対する答えが見つからないので、新しい質問をします。

同じソリューション内の別のクラスのプロパティを入力したいオブジェクトがあります。ただし、オブジェクトは読み取り専用プロパティのみを公開する必要があるため、外部呼び出し元はセッターを表示したりアクセスしたりできません (セッターがないため)。

同じソリューションから内部バッキング変数を埋める最良の方法は何ですか? コンストラクターで実行できることはわかっていますが、オブジェクトの作成後に変数を設定できるようにしたいと考えています。

私の奇妙な説明で申し訳ありませんが、少しのコードが役立つかもしれません。

これは私が今していることです:

Public Class ReadonlyObject

    Protected Friend Sub New()
    End Sub

    'Could use this, but don't want to...
    Protected Friend Sub New(foo As String)
    End Sub

    Friend _foo As String

    Public ReadOnly Property Foo As String
        Get
            Return _foo
        End Get
    End Property

End Class

Public Class FillReadonlyObject

    Private Sub DoSomeHeavyWork()
        Dim roObject As New ReadonlyObject

        roObject._foo = "bar"

        'Could use this, but don't want to...want to access properties directly.
        Dim roObject2 As New ReadonlyObject("bar")

    End Sub

End Class

これにより、ReadonlyObject のプロパティは読み取り専用として正しく公開されますが、残念ながらそれは悪い習慣です。

私はこのような実装を見てきました:

Public Class ReadonlyObject

Protected Friend Sub New()
End Sub

Private _foo As String

Public Property Foo As String
    Get
        Return _foo
    End Get
    Friend Set(value As String)
        _foo = value
    End Set
End Property

End Class

Public Class FillReadonlyObject

Private Sub DoSomeHeavyWork()
    Dim roObject As New ReadonlyObject

    roObject.Foo = "bar"
End Sub

End Class

これは機能しますが、setter を使用してプロパティを公開します。アクセスできませんが、表示されており、私はそれを望んでいません:)

したがって、これは表面的なものにすぎないかもしれませんが、プロパティが厳密に読み取り専用であることを呼び出し元 (または少なくともインテリセンス) に伝えるのは良いことだと思います。

ありがとう、ヤン

4

1 に答える 1