在 C# < 4 中,如何根据参数的运行时类型分派到方法?

2024-02-25

我有一个对象o在运行时保证是三种类型之一A, B, or C,所有这些都实现了一个通用接口I。我可以控制I, 但不是A, B, or C。 (因此,我可以使用空标记接口,或者以某种方式通过使用接口来利用类型中的相似性,但我无法添加新方法或更改类型中的现有方法。)

我也有一系列的方法MethodA, MethodB, and MethodC。运行时类型为o被查找然后用作这些方法的参数。

public void MethodA(A a) { ... }
public void MethodB(B b) { ... }
public void MethodC(C c) { ... }

使用此策略,现在必须对类型进行检查o以确定应调用哪个方法。相反,我只想拥有三个重载方法:

public void Method(A a) { ... } // these are all overloads of each other
public void Method(B b) { ... }
public void Method(C c) { ... }

现在我让 C# 进行调度,而不是我自己手动进行。这可以做到吗?当然,这种简单直接的方法是行不通的:

无法解析方法“方法(对象)”。候选人是:

  • 无效方法(A)
  • 无效方法(B)
  • 无效方法(C)

如果您可以重构它,请将方法移至接口并让每个类都有其实现:

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

在 C# < 4 中,如何根据参数的运行时类型分派到方法? 的相关文章

  • Qt 图表和数据可视化小部件

    我已经安装了 Qt 5 7 来尝试 Qt 图表和 Qt 数据可视化 但我在 Qt Designer 和 Qt Creator 中都找不到新的小部件 有什么建议我应该做什么才能让新的小部件出现在设计器中 我今天遇到了完全相同的问题 默认情况下
  • 是否有可能劫持标准输出

    我正在尝试使用 C 重定向 Windows XP 上已运行进程的标准输出 我知道如果我自己生成进程 我可以做到这一点 但对于这个应用程序 我更喜欢一个 监听器 我可以附加到另一个进程 这在纯 Net 中可能吗 如果不可能 在 Win32 中
  • 生成多个随机数

    我想生成 25 个唯一的随机数并将它们列在控制台中 数字的长度应至少为 10 个字符 有什么简单的方法可以做到这一点吗 尝试将数字构建为字符串 并使用 HashSet 确保它们是唯一的 Random random new Random Ha
  • 将公历日期转换为儒略日期,然后再转换回来(随着时间)

    我正在编写一个程序 必须将当前的公历日期和时间转换为儒略日期 然后再转换回公历门 最终我需要添加能够添加年 月 日 小时 分钟和秒的功能 但我需要先解决这部分问题 现在我已经从公历日期转换为儒略日期 所以从逻辑上讲 我觉得我应该能够以某种方
  • 平滑手绘曲线

    我有一个允许用户绘制曲线的程序 但这些曲线看起来不太好 它们看起来摇摇欲坠 而且是手绘的 所以我想要一种能够自动平滑它们的算法 我知道平滑过程中存在固有的模糊性 因此它不会每次都完美 但这种算法似乎确实存在于多个绘图包中 并且它们工作得很好
  • 使用 C# 将多个音频样本混合到单个文件中

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个能够创建音频文件 mp3 或 wav 的库 NAudio http www codeple
  • 局部函数声明有什么用处吗?

    大多数像我这样的 C 程序员都曾犯过以下错误 class C int main C c declares a function c taking no arguments returning a C not as intended by m
  • 组合框下拉位置

    我有一个最大化的表单 其中包含 500px 的组合框控件 停靠在右上角 Width 尝试打开组合框后 列表的一半超出了屏幕 如何强制列表显示在表单中 棘手的问题 我找不到解决这个问题的好办法 只是一个解决方法 添加一个新类并粘贴如下所示的代
  • 如何减少 MinGW g++ 编译器生成的可执行文件的大小?

    我有一个简单的 Hello world C 程序 在 Win XP 下由 MinGW g 编译器编译为 500kB 可执行文件 有人说这是由于iostream的库和静态链接libstdc dll Using s链接器选项有点帮助 减少了 5
  • 控制台应用程序中使用 Unicode 字符的 _tprintf

    我正在从 Unicode 构建的控制台应用程序 使用 C 和 Visual Studio 2008 执行这个简单的输出 此代码旨在在 Windows 上运行 tprintf L Some sample string n 一切正常 但是如果我
  • 如何将STL容器数据转储到gdb中?

    我无法在 gdb 中转储 STL 无序映射容器值 变量类型是 std unordered map var 我的 gdb 版本 7 7 1 GDB配置 configure host x86 64 linux gnu target x86 64
  • 如何构建一棵与或树?

    我需要一个支持 与 和 或 的树结构 例如 给定一个正则表达式 如ab c d e 我想把它变成一棵树 所以 一开始我们有两个 或 分支 它可以向下ab or c d e 如果你低头ab分支 你得到两个节点 a and b or a其次是b
  • C#:自定义转换为值类型

    是否可以将自定义类转换为值类型 这是一个例子 var x new Foo var y int x Does not compile 是否有可能实现上述情况 我需要超载一些东西吗Foo 您将必须重载强制转换运算符 public class F
  • 从 DataRow 单元格解析 int [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 如何从 DataRow 单元格解析 int 值 Int32 Parse item QuestionId ToString 这段代码可以工作 但看
  • Gremlin.net 文本包含等效项

    我正在使用 Gremlin net 库连接到 janus 图形服务器 我使用 cassandra 和弹性搜索进行数据存储和索引 在我使用的 gremlin 语言和 gremlin 控制台中文本包含在属性的文本中进行搜索 我正在使用混合索引
  • 连接到没有元数据的网络服务

    我想连接到此网络服务 https training api temando com schema 2009 06 server wsdl https training api temando com schema 2009 06 serve
  • C 变量声明的效率 [重复]

    这个问题在这里已经有答案了 例如 在 C 中声明一个变量需要多长时间int x or unsigned long long var 我想知道它是否会让我的代码在类似的事情中更快 for conditions int var 0 code 这
  • Boost.asio和异步链,unique_ptr?

    我对异步编程不太熟悉 我有一个问题 我的问题如下 给出 boost asio 中 C 11 的 echo server 示例 http www boost org doc libs 1 60 0 doc html boost asio ex
  • 实体框架代码首次日期字段创建

    我正在使用实体框架代码优先方法来创建我的数据库表 下面的代码 创建一个DATETIME数据库中的列 但我想创建一个DATE柱子 DataType DataType Date DisplayFormatAttribute ApplyForma
  • 将一个 IEnumerable 拆分为多个 IEnumerable

    我是 linq 新手 我需要根据指示器将 Couple string text bool Indicator 类型的 IEnumerable 拆分为多个 IEnumerable 我尝试使用skipWhile 和 TakeWhile 但没有找

随机推荐

  • 如何使用 jQuery 设置跨度值

    如何设置a的值 span 使用 jQuery 标记 例如 下面是我的 span tag span span 在我的 jQuery 代码中 jQuery noConflict jQuery document ready function va
  • 使用 MEF 2 组合导出值

    使用 MEF 1 可以使用 ComposeExportedValue Method 将现有对象组合到容器中 container ComposeExportedValue 如何使用 Microsoft Composition MEF 2 来完
  • 如何在不使用触摸屏的情况下模拟触摸事件

    我目前正在尝试开发一个触摸屏应用程序 Windows 7的 视觉工作室2013 C WPF 我工作的地方将配备触摸屏 实际上是放置在平面屏幕上的一层 我希望能够生成触摸输入 以便在没有屏幕的情况下开发和测试应用程序 我找到的所有资源要么非常
  • 定制 Android 操作系统构建

    我想知道创建自定义 Android 版本并将其部署到市场上当前可用的设备上的可行性如何 是否有描述该过程的文件或指南 先感谢您 萨米 Try dsixda 的 Android 厨房 http forum xda developers com
  • JSON序列化时如何使用JavaScriptSerializer设置格式?

    我正在使用 JavaScriptSerializer 将文件中的对象序列化为 JSON 格式 但结果文件没有可读的格式 如何允许格式化以获得可读文件 你可以使用JSON NET http json codeplex com 序列化器 支持
  • Matplotlib寄生对数轴勾选不需要的镜像

    我正在尝试使用 mpl toolkits axes grid1 中的 host subplot 制作一个具有两个 y 轴的图 其中一个是对数轴 一个是线性轴 该图看起来不错 但辅助 y 轴 右 的小刻度也显示在图内部的主 y 轴 左 上 i
  • android sqlite数据库中rawquery和execSQL的区别

    使用 rawquery 和 execSQL 之间的确切区别是什么 在 android Activity 中编写查询时 何时使用 rawquery 以及何时使用 execSQL 来自 API 文档 void execSQL String sq
  • 片段 - 您是否必须在包含整个活动的片段周围使用活动包装器?

    考虑以下示例应用程序开发者 android com http developer android com images fundamentals fragments png 这描述了如何使用 Fragment 如下所示 在电话上 您可以在活
  • 是否可以将条件属性创建为 DisplayIf?

    我想创建一个与我的视图模型一起使用的属性 我想根据第三个值显示不同的文本字符串 我想做这样的事情 DisplayIf IsPropertyValid true Name value 1 DisplayIf IsPropertyValid f
  • 当第三方 C 函数返回指针时,您应该自行释放它吗?

    有许多函数 特别是在 POSIX 库中 返回指向几乎必然新分配的数据的指针 他们的联机帮助页没有说明您是否应该释放它们 或者是否有一些模糊的机制在起作用 例如返回指向静态缓冲区的指针 或者类似的东西 例如 inet ntoa http ww
  • 使用 Graphics.CopyFromScreen 以 150% 缩放比例截取屏幕截图

    我正在尝试创建屏幕截图 位图 我写了这个函数 public static Bitmap CreateScreenshot Rectangle bounds var bmpScreenshot new Bitmap bounds Width
  • Spark应用程序启动后如何更改名称?

    我在更新 重新配置名为 spark 的预定义 Spark 上下文时遇到问题 spark sparkContext conf get spark app name 返回应用程序名称 Databricks Shell 我想更新它并尝试使用 sp
  • 如何将一周 (200851) 转换为日期 (2008-12-27)?

    如何将年周 例如 0852 或 200852 转换为日期 例如 2008 12 31 或具体的一周结束日 即星期六 2008 12 27 或一周开始日 即 2008 年 12 月 21 日 周末的任何一天都可以 周五 周六 周日或周一 SQ
  • 如何调整/dev/shm的大小?

    On Ubuntu 18 04 当我跑步时 df h 我看到这个结果 Filesystem Size Used Avail Use Mounted on tmpfs 3 9G 73M 3 8G 2 dev shm dev shm大小为3 9
  • 评估一串简单的数学表达式[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 挑战
  • 创建一个随机数并检查它是奇数还是偶数

    我希望创建一个批处理文件 该文件在运行时创建一个从 0 到 100 的随机整数 然后通过 if 语句运行它来检查它是奇数还是偶数 我遇到了一些麻烦 所以这就是我到目前为止遇到的问题 echo off set a num random 100
  • 如何使用 Swift 中的协议公开 Objective-C 对象的私有类方法?

    考虑两个私有方法UIColor 实例方法styleString返回颜色的 RGB 字符串 类方法 systemDestructiveTintColor它返回破坏性按钮使用的红色 UIColor h 私有标头供参考 https github
  • ServiceStack:否/swagger-ui/index.html

    我正在将 ServiceStack 用于我的自定义服务 在没有 IIS 的独立模式下 我想为我的服务添加超出范围的文档 metadata做 我想尝试一下 Swagger 插件 我已将插件命令添加到我的配置中 public override
  • 存在类型表达式的 Skolem 化

    在 Scala 中 以下表达式会引发类型错误 val pair A gt String A forSome type A a Int gt a toString 19 pair 1 pair 2 正如中提到的SI 9899 https is
  • 在 C# < 4 中,如何根据参数的运行时类型分派到方法?

    我有一个对象o在运行时保证是三种类型之一A B or C 所有这些都实现了一个通用接口I 我可以控制I 但不是A B or C 因此 我可以使用空标记接口 或者以某种方式通过使用接口来利用类型中的相似性 但我无法添加新方法或更改类型中的现有