大佬教程收集整理的这篇文章主要介绍了覆盖子类中的ReadOnly属性以使其成为读/写(VB.NET或C#),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在我下面的例子中,它不允许我编译ReadWriteChild.我想我可以让父读/写,然后让ReadOnlyChild的setter不做任何事情,但这似乎有点hacky.在这种情况下,最好的替代方案似乎是放弃属性而采用getter / setter方法.
Public MusTinherit Class Parent Public MustOverride ReadOnly Property Foo() As String End Class Public Class ReadOnlyChild Inherits Parent Public Overrides ReadOnly Property Foo() As String Get ' Get the Property End Get End Property End Class Public Class ReadWriteChild Inherits Parent Public Overrides Property Foo() As String Get ' Get the property. End Get Set(ByVal value As String) ' Set the property. End Set End Property End Class@H_197_5@
通常,您可以在VB.NET中声明属性,如下所示:
Public Class qwqwqw Public Property xyz() As String Get Return "" End Get Private Set(ByVal value As String) ' End Set End Property End Class
基本上将整体属性标记为公共属性,但为setter(或getter)提供更具限制性的范围.
您的案例中的主要问题是MusTinherit(即抽象)基类.由于您在其中定义的属性标记为MustOverride,因此您无法提供默认实现(即,它也是抽象的),这包括“获取”和“设置”轮廓,因此,无论哪个“整体” “您给这个抽象属性声明的范围,VB.NET将强制您将此范围用于派生类中的getter和setter.
在基类的属性上使用ReadOnly限定符将强制所有派生类和此属性的实现也是ReadOnly.抛弃ReadOnly限定符仍然不起作用,因为您给abstract属性的任何范围都是必须应用于派生实现中的setter和getter的范围.
例如:
Public MusTinherit Class Parent Public MustOverride Property Foo() As String End Class Public Class ReadOnlyChild Inherits Parent Public Overrides Property Foo() As String Get ' End Get Private Set(ByVal value As String) ' End Set End Property End Class
(注意setter上的私有作用域).这不起作用,因为VB.NET坚持认为,因为你要覆盖基类属性,所以你的整个属性必须与你要覆盖的属性(在本例中为publiC)具有相同的范围.
尝试使基类的抽象属性受到保护也不起作用,因为您需要在与基类中声明的范围相同的范围内实现该属性(即受保护).通常,在不使用特定的作用域级别覆盖基类的抽象定义时,可以为getter或setter提供更严格的作用域级别,但是不能给它一个限制较少的作用域级别.
因此:
Public MusTinherit Class Parent Protected MustOverride Property Foo() As String End Class Public Class ReadOnlyChild Inherits Parent Protected Overrides Property Foo() As String Public Get ' End Get Set(ByVal value As String) ' End Set End Property End Class
(注意吸气剂的公共范围).由于公共范围的限制性小于受保护的整体属性范围,而且不是与基类的抽象属性声明中定义的范围级别相同,因此不起作用.
如果您的类的设计正如您在问题中提到的那样,我个人会使用“java风格”的getter和setter方法,因为它们可以使用自己的范围级别单独声明.
@H_197_5@以上是大佬教程为你收集整理的覆盖子类中的ReadOnly属性以使其成为读/写(VB.NET或C#)全部内容,希望文章能够帮你解决覆盖子类中的ReadOnly属性以使其成为读/写(VB.NET或C#)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。