如果我设置朋友级别范围上的二传手,像这样...限制Setter范围并应用接口后,范围被忽略!
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,但是最终开发人员不应该能够进入。目前,我正在将整个班级包装在外观中以获得此功能,但外观应该是不必要的。
诅咒!那么你在这里做什么,将这个类封装在一个门面风格的结构中,并将其呈现给最终开发人员,同时保持“正常”类用于内部使用? – 2009-02-05 20:24:58