セッターにフレンドレベルのスコープを設定すると、次のようになります...
Public Class MyClass
Public Property IsDirty() As Boolean
Get
Return _isDirty
End Get
Friend Set(ByVal trueFalse As Boolean)
_isDirty = trueFalse
End Set
End Property
End Class
...そして別のプロジェクトからそれを呼び出すと、それは正しく機能します。MyClass.IsDirty=Trueのようなことはできません。
素晴らしい!それがまさに私が欲しいものです。
しかし、インターフェイスを定義すると、実際にそれを行う必要があります。
Public Interface IMyClass
Property IsDirty() As Boolean
End Interface
私は次のようなことができます:
Dim MyInstance as IMyClass= GetSomeInstanceOfMyClass()
MyInstance.IsDirty=True
...そして、奇妙なことに、それは実行されます!例外はスローされず、内部変数はTrueに設定されます。フレンドスコープを完全に無視します!
それは恐ろしいです。何が足りないの?
注: APIを設計しているため、これが必要です。内部APIでIsDirtyを設定できるようにしたいのですが、エンド開発者はそれに入ることができないはずです。現在、この機能を取得するためにクラス全体をファサードでラップしていますが、ファサードは不要である必要があります。