我的表和数据行具有以下结构:
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# 添加,没问题;)
最佳答案
我不认为你能做你正在寻找的事情。替换基类的功能就是重写的全部内容。您可以从派生类访问基类成员,但不能从外部类访问基类成员。
您可以做的就是向派生类添加一个新属性,以不同的名称公开基类功能:
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
。
不过,想做这样的事情是相当不寻常的。如果您提供有关您想要完成的任务的更多信息,人们可能会提出一些好的建议。
关于.net - 继承,仅使用基类的属性,而不使用派生类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16412555/