.net 重写继承类中的默认属性值
假设我定义了以下父类:.net 重写继承类中的默认属性值,.net,vb.net,oop,.net,Vb.net,Oop,假设我定义了以下父类: Public Class Parent Public Property Prop1 As String = "MyDB1" End Class 我希望继承它,但希望该属性对子类具有不同的值 我想我可以这样做: Public Class Child Inherits Parent Public Sub New() MyBase.New() MyBase.Prop1 = "MyDB2" End Sub
Public Class Parent
Public Property Prop1 As String = "MyDB1"
End Class
我希望继承它,但希望该属性对子类具有不同的值
我想我可以这样做:
Public Class Child
Inherits Parent
Public Sub New()
MyBase.New()
MyBase.Prop1 = "MyDB2"
End Sub
End Class
但我想知道这是否是最好的方法,或者是否有类似于可重写属性的东西,或者这只是一种糟糕的编程实践
谢谢 在c#中,为了使属性可重写,可以将类成员标记为virtual
,并且该关键字的vb.net等式为可重写
public virtual int MyProperty {get;set;}
此属性可以在子类中重写,如下所示:
public override int MyProperty {
get{
//return some other thing
}
}
Vb.NET等效工具:
在超级班:
Public Overridable Property MyProperty As Integer
Get
End Get
Set
End Set
End Property
在子类中:
Public Overrides Property MyProperty As Integer
Get
//return some other thing
End Get
End Property
在c#中,为了使属性可重写,您可以将类成员标记为virtual
,并且该关键字的vb.net等式为overridable
public virtual int MyProperty {get;set;}
此属性可以在子类中重写,如下所示:
public override int MyProperty {
get{
//return some other thing
}
}
Vb.NET等效工具:
在超级班:
Public Overridable Property MyProperty As Integer
Get
End Get
Set
End Set
End Property
在子类中:
Public Overrides Property MyProperty As Integer
Get
//return some other thing
End Get
End Property
根据你的评论,我的意见如下:
- 如果您控制基类,则如果目的是基于派生类型的业务规则更改其值,则将其设置为可重写
- 如果您无法控制基类,并且需要“重写”属性,则可以“隐藏”基类属性;在C#中,它看起来类似于
,但我不确定这是如何在VB中实现的newpublic int MyProperty{…}
- 如果您只需要属性返回一个不同的值,那么您所做的一切似乎都很好
- 如果您控制基类,则如果目的是基于派生类型的业务规则更改其值,则将其设置为可重写
- 如果您无法控制基类,并且需要“重写”属性,则可以“隐藏”基类属性;在C#中,它看起来类似于
,但我不确定这是如何在VB中实现的newpublic int MyProperty{…}
- 如果您只需要属性返回一个不同的值,那么您所做的一切似乎都很好
- 根据您的评论,我的意见如下:
publicproperty Prop1=“MyDB2”
(首先使用可重写的a la@sellmeadog)谢谢,@sellmeadog。。。我就是这么做的,它看起来也很好我想我的问题是,这是好是坏,还是只是和我做的不同?我仍在努力学习面向对象的最佳编程实践。谢谢也许我没有抓住问题的重点,但是您是否尝试过使该属性可重写?在子类中重新声明该属性如何publicproperty Prop1=“MyDB2”
(首先使用可重写的a la@sellmeadog)谢谢,@sellmeadog。。。我就是这么做的,它看起来也很好我想我的问题是,这是好是坏,还是只是和我做的不同?我仍在努力学习面向对象的最佳编程实践。谢谢非常感谢Behnam,非常有意义,感谢您提供的代码示例!!!-我只是没有将您标记为解决方案(尽管它完全正确),因为@sellmeadog更快地提供了解决方案。不过,非常感谢@约翰布斯托斯,谢谢!但我比赛尔米阿狗早了8分钟。无论如何…:)您的解决方案,是的,但我们已经通过评论讨论过了。。。对不起,伙计,我只是想对他公平一点:)非常感谢alot Behnam,非常有意义,谢谢你的代码示例!!!-我只是没有将您标记为解决方案(尽管它完全正确),因为@sellmeadog更快地提供了解决方案。不过,非常感谢@约翰布斯托斯,谢谢!但我比赛尔米阿狗早了8分钟。无论如何…:)您的解决方案,是的,但我们已经通过评论讨论过了。。。对不起,伙计,我只是想对他公平一点:)