【发布时间】:2009-02-05 17:57:24
【问题描述】:
如果我在 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。它完全忽略了 Friend 范围!
这太可怕了。我错过了什么??
注意:我需要这个,因为我正在设计一个 API,我希望内部 API 能够设置 IsDirty,但最终开发人员不应该能够参与其中。目前我将整个类包装在外观中以获得此功能,但外观应该是不必要的。
【问题讨论】:
标签: vb.net scope interface setter