我的表和数据库有以下结构:
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#中添加解决方案,没问题;)
答案 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
。
但是想要做这样的事情是相当不寻常的。如果你提供一些关于你想要完成什么的更多信息,那么人们可能会有一些好的建议。