C# 继承:更改派生类中的字段数据类型和值

2024-02-12

是否可以在派生类中更改基类字段数据类型和值,并且仍然调用基类方法但使用派生类值?

示例代码:

public class class1 
{
  protected DBContext DB { get; set; }

  public A() 
  {
    DB = new DBContext();
  }

  public virtual DBRecord find(int id)
  {
    return DB.DBRecord.Find(id);
  }
}

public class class2 : class2
{
  protected DifferentDBContext DB { get; set; }

  public B()
  {
    DB = new DifferentDBContext();
  }
}

然后我尝试使用下面的代码调用该方法。

class2 x = new class2();
x.find(1); // calls the base class method with base class field values

根据发生的情况,它使用基类变量调用基类方法。我想知道是否可以在派生类中设置字段类型/值,然后调用基类方法?因为它们只是具有相同的实现,但只是使用不同的值。

到目前为止我所做的(我觉得这是多余的)和工作。

public class class2 : class1 
{
  //Other implementations omitted
  public override DBRecord find(int id)
  {
    return DB.DBRecord.Find(id);
  }
}

注意:这可能只是一个简单的 OOP 原则,但你知道,人们有时会对此感到困惑,就像我一样:-)


执行此操作的方法是在基类中使您的属性成为虚拟的:

public class class1 
{
  protected virtual DBContext DB { get; set; }
  ...
}

然后在派生类中重写它:

public class class2 : class1
{
  private DifferentDBContext DDB;
  protected override DBContext DB 
  { 
    get { return DDB; } 
    set { DDB = value is DifferentDBContext ? (DifferentDBContext)value : null; } 
  }
}

这是假设DifferentDBContext is a DBContext.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 继承:更改派生类中的字段数据类型和值 的相关文章

随机推荐

  • 类型错误:push() 不是一个函数

    我正在尝试将一个项目推送到数组 但它不起作用 当我运行代码时 我收到此错误 未捕获的类型错误 data allItems type push 不是函数 var data allItems exp inc totals exp 0 inc 0
  • 如何在后台运行 Solr Jetty

    我正在使用 Solr 附带的 Jetty Solr 构建 并且希望在后台而不是在终端中运行它 现在我开始它java jar start jar但我希望它记录到一个文件并在服务器的后台运行 以便我可以关闭终端窗口 我确信有一些我找不到的 ja
  • 使用PyInstaller将.py和.txt文件封装成.exe文件

    我有 2 个文件想要放入 exe 文件中 其中一个文件是 py 另一个是 txt我找不到如何获取多个文件并将其转换为可执行文件 请帮忙 您应该将 txt 文件放在一个文件夹中 然后将文件夹的名称放在 标签中 pyinstaller onef
  • 使用 Javascript 访问 CSS 自定义变量

    我在 css 文件中有以下样式 galleryImages position absolute top 24px left 41px width 900px moving false 当我尝试通过 Javascript 访问它时 它返回未定
  • JMeter(活动?)FTP 到 VLTrader

    情况 我正在使用 JMeter 来加载测试我的通信应用程序 Cleo VLTrader 我是 JMeter 的新手 并且能够使 HTTP 通信工作 但不能使 FTP 工作 当我尝试使用 JMeter FTP 请求采样器时 我可以在服务器端看
  • Nodejs如何为每个请求设置内容类型标头

    我想知道如何设置标题 Content Type application json 对于每个进来的 Nodejs Express 请求 我尝试了这两行 但如果我自己不添加标头 我的调用仍然失败 app use function req res
  • 如何创建一个Looper线程,然后立即向其发送消息?

    我有一个工作线程位于后台 处理消息 像这样的事情 class Worker extends Thread public volatile Handler handler actually private of course public v
  • Clojure 中的结构共享

    我不清楚 Clojure 中的结构共享 下面是一个函数 xconj 取自 Joy of Clojure 顺便说一句 很棒的书 Building a naive binary search tree using recursion defn
  • 如何禁用
     块的 Prettier 以便保留新行(换行符)?                
                

    prettier config js module exports arrowParens always bracketSpacing true endOfLine auto printWidth 180 semi true singleQ
  • 如何使用请求模块缓冲 HTTP 响应?

    我想将 HTTP 响应的内容流式传输到变量 我的目标是通过获取图像request 并将其存储在 MongoDB 中 但图像总是损坏 这是我的代码 request http google com doodle png function err
  • 如何在使用 boto3 create_presigned_post 时添加元数据?

    想要将自定义元数据添加到我上传的文件中create presigned post来自boto3 我正在运行以下代码 但收到 403 响应 下面的代码借用自here https boto3 amazonaws com v1 documenta
  • 如何将 BytesIO 与 matplotlib 和 pyqt5 一起使用?

    我在 matplotlib 中制作了一个图表 并希望将其放入图像中并在我的 pyqt5 应用程序中使用它 有人建议我为此使用 BytesIO 到目前为止 这是我的代码 绘制我的图表 plt axis equal buff io BytesI
  • 应该是“安排-断言-行动-断言”吗?

    关于经典的测试模式安排 执行 断言 http c2 com cgi wiki ArrangeActAssert 我经常发现自己在 Act 之前添加了反断言 这样我就知道传递的断言确实是作为操作的结果传递的 我认为它类似于红绿重构中的红色 只
  • 所有执行器均已死亡 MinHash LSH PySpark approxSimilarityJoin EMR 集群上的自连接

    在 name id name 组合的数据帧上调用 Spark 的 MinHashLSH 的 approxSimilarityJoin 时 我遇到了问题 我尝试解决的问题的摘要 我有一个包含大约 3000 万个公司名称唯一 name id n
  • CALayer 作为子层不可见

    我正在尝试构建一个动画圆圈 该圆圈将按顺时针方向绘制 直到它变成完整的圆圈 如图所示iPhone 核心动画 画一个圆 https stackoverflow com questions 7991086 iphone core animati
  • Android findViewById 返回 NULL

    有时我的 xml 视图和 Android Eclipse SDK 中包含的子元素有一个奇怪的问题 例如 我有一个名为 main xml 的 xml 视图 其中有一个 LinearLayout 和一个 TextView 作为唯一的子视图 其
  • 如何在LUIS Dialog内部调用LUIS Dialog?

    我的机器人有 LUIS 对话框 有几个意图 我从 MessageController 调用 LUIS 对话框 如果检测到意图 我将启动一个子对话框 当子对话框完成后 我调用context Done response from user 在那
  • NULLS FIRST/LAST 覆盖在 Spring Boot 3/Hibernate 6 的 JPA 存储库中不再起作用

    在带有 Hibernate 5 的 Spring Boot 2 中 我们有一个如下查询 Query SELECT m FROM ProjectMember m ORDER BY m lastActive ASC NULLS LAST Lis
  • Box2D:如何手动渲染身体

    我成功地将 Box2D 安装到我的项目中 但我怎样才能渲染身体呢 假设我正在使用支持绘制多边形的东西 我只想找出主体多边形顶点的当前位置 以便用引擎绘制它 如果你能帮助我 我将非常感激 我找到了 void Box2DUtils DrawBo
  • C# 继承:更改派生类中的字段数据类型和值

    是否可以在派生类中更改基类字段数据类型和值 并且仍然调用基类方法但使用派生类值 示例代码 public class class1 protected DBContext DB get set public A DB new DBContex