如果我在 setter 上设置 Friend 级别的范围,像这样......
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,但最终开发人员不应该能够参与其中。目前我将整个类包装在一个外观中以获得此功能,但外观应该是不必要的。