私の質問に対する答えが見つからないので、新しい質問をします。
同じソリューション内の別のクラスのプロパティを入力したいオブジェクトがあります。ただし、オブジェクトは読み取り専用プロパティのみを公開する必要があるため、外部呼び出し元はセッターを表示したりアクセスしたりできません (セッターがないため)。
同じソリューションから内部バッキング変数を埋める最良の方法は何ですか? コンストラクターで実行できることはわかっていますが、オブジェクトの作成後に変数を設定できるようにしたいと考えています。
私の奇妙な説明で申し訳ありませんが、少しのコードが役立つかもしれません。
これは私が今していることです:
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 を使用してプロパティを公開します。アクセスできませんが、表示されており、私はそれを望んでいません:)
したがって、これは表面的なものにすぎないかもしれませんが、プロパティが厳密に読み取り専用であることを呼び出し元 (または少なくともインテリセンス) に伝えるのは良いことだと思います。
ありがとう、ヤン