Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 重写继承类中的默认属性值_.net_Vb.net_Oop - Fatal编程技术网

.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#中,它看起来类似于
    newpublic int MyProperty{…}
    ,但我不确定这是如何在VB中实现的
  • 如果您只需要属性返回一个不同的值,那么您所做的一切似乎都很好

    • 根据您的评论,我的意见如下:

      • 如果您控制基类,则如果目的是基于派生类型的业务规则更改其值,则将其设置为可重写
      • 如果您无法控制基类,并且需要“重写”属性,则可以“隐藏”基类属性;在C#中,它看起来类似于
        newpublic int MyProperty{…}
        ,但我不确定这是如何在VB中实现的
      • 如果您只需要属性返回一个不同的值,那么您所做的一切似乎都很好

      也许我没有抓住问题的重点,但是您是否尝试过使该属性可重写?在子类中重新声明该属性如何
      publicproperty Prop1=“MyDB2”
      (首先使用可重写的a la@sellmeadog)谢谢,@sellmeadog。。。我就是这么做的,它看起来也很好我想我的问题是,这是好是坏,还是只是和我做的不同?我仍在努力学习面向对象的最佳编程实践。谢谢也许我没有抓住问题的重点,但是您是否尝试过使该属性可重写?在子类中重新声明该属性如何
      publicproperty Prop1=“MyDB2”
      (首先使用可重写的a la@sellmeadog)谢谢,@sellmeadog。。。我就是这么做的,它看起来也很好我想我的问题是,这是好是坏,还是只是和我做的不同?我仍在努力学习面向对象的最佳编程实践。谢谢非常感谢Behnam,非常有意义,感谢您提供的代码示例!!!-我只是没有将您标记为解决方案(尽管它完全正确),因为@sellmeadog更快地提供了解决方案。不过,非常感谢@约翰布斯托斯,谢谢!但我比赛尔米阿狗早了8分钟。无论如何…:)您的解决方案,是的,但我们已经通过评论讨论过了。。。对不起,伙计,我只是想对他公平一点:)非常感谢alot Behnam,非常有意义,谢谢你的代码示例!!!-我只是没有将您标记为解决方案(尽管它完全正确),因为@sellmeadog更快地提供了解决方案。不过,非常感谢@约翰布斯托斯,谢谢!但我比赛尔米阿狗早了8分钟。无论如何…:)您的解决方案,是的,但我们已经通过评论讨论过了。。。对不起,伙计,我只是想对他公平一点:)