.net - 继承,仅使用基类的属性,而不使用派生类的属性

标签 .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# 添加,没问题;)

最佳答案

我不认为你能做你正在寻找的事情。替换基类的功能就是重写的全部内容。您可以从派生类访问基类成员,但不能从外部类访问基类成员。

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

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/

相关文章:

c# - 在 .NET 中粉碎文件

c# - 使用特定的模式来实现接口(interface)

java - 如何避免使用通配符对继承的递归类进行强制转换?

nhibernate - 将多个鉴别器值映射到 NHibernate 中的单个默认类

java - 为什么 @OneToMany 不适用于 Hibernate 中的继承

c# - 如何在 .net 中使用反射获取对象名称?

c# - 如何确定 C# 应用程序中的空闲时间?

vb.net - 如何在我们的 T4 模板生成器中包含自定义实用程序类?

asp.net - 单击按钮时动态添加新文本框

asp.net - ex 与 ex.ToString 之间有什么区别吗? ASP.NET