继承,仅使用基类的属性而不是派生类的属性

时间:2013-05-07 06:28:43

标签: .net vb.net inheritance

我的表和数据库有以下结构:

Public Class MyDataTable(Of MyDataRowDerived)

Public Class MyDataRowBase(Of DataRow)
    Public Property MyDescription As String

Public Class MyDataRowDerived(Of MyDataRowBase)
  inherits MyDataRowBase
    Public overrides Property MyDescription As String

如果我从我的表创建一行,它的类型为MyDataRowDerived,但我不想在它上面使用重写的属性,而只是在基类中使用普通的属性。并试图以这种方式实现它:

Dim row As MyDataRowBase = CType(myTable.AddNew(), MyDataRowBase)
Dim retrievedDescription = row.MyDescription

我这样强硬,我会强迫对象相信它只是基类,但它仍然使用我的devired类中的属性。

我的对象返回的描述是在派生类中实现的,但我需要基类中的那个

也可以在C#中添加解决方案,没问题;)

3 个答案:

答案 0 :(得分:1)

不是很清楚你要求完全,但是

如果你有

public class Base {
    public string SomeProperty {get;set;}
}

public class Deived : Base {
    public void SomeMethod() {
        this.SomeProperty; //It's the same property available in base class 

        /**If the base property is virtual and you overriden in Derived 
           write base.SomeProperty **/
    }
}

如果这不是您所要求的,请澄清。

答案 1 :(得分:1)

那不会发生,你不能从基地转介孩子。

答案 2 :(得分:1)

我认为你不能做你想要的。替换基类的功能是最重要的。您可以从派生类访问基类成员,但不能从外部类访问。

您可以做的是向派生类添加一个新属性,以不同的名称公开基类功能:

public class MyDataRowBase : DataRow
{
  public virtual string MyDescription { get; set; }
}

public class MyDataRowDerived : MyDataRowBase
{
  public override string MyDescription { ... }

  public string BaseMyDescription
  {
    get { return base.MyDescription; }
    set { base.MyDescription = value; }
  }
}

如果要从外部类访问基本属性的值,则可以使用BaseMyDescription

但是想要做这样的事情是相当不寻常的。如果你提供一些关于你想要完成什么的更多信息,那么人们可能会有一些好的建议。