2

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

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# 中添加解决方案,这没问题;)

4

3 回答 3

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 **/
    }
}

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

于 2013-05-07T06:34:10.317 回答
1

这不会发生,你不能从基地推荐孩子。

于 2013-05-07T06:55:44.107 回答
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如果您想从外部类访问基本属性的值,则可以使用。

不过,想要做这样的事情是相当不寻常的。如果您提供有关您要完成的工作的更多信息,人们可能会提出一些好的建议。

于 2013-05-07T06:57:53.097 回答