C# 泛型及其具体实现

2024-01-01

是否可以在 C# 中创建泛型方法并为给定类型添加具体实现? 例如:

void Foo<T>(T value) { 
    //add generic implementation
}
void Foo<int>(int value) {
   //add implementation specific to int type
}

在您的具体示例中,您不需要这样做。相反,您只需实现非泛型重载,因为编译器会更喜欢使用它而不是泛型版本。编译时类型用于分派对象:

void Foo<T>(T value) 
{ 
}

void Foo(int value) 
{
   // Will get preferred by the compiler when doing Foo(42)
}

然而,在一个一般情况,这并不总是有效。如果你混合继承或类似的东西,你可能会得到意想不到的结果。例如,如果您有一个Bar实现的类IBar:

void Foo<T>(T value) {}
void Foo(Bar value) {}

你通过以下方式调用它:

IBar b = new Bar();
Foo(b); // Calls Foo<T>, since the type is IBar, not Bar

您可以通过动态调度解决此问题:

public void Foo(dynamic value)
{
    // Dynamically dispatches to the right overload
    FooImpl(value);
}

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

C# 泛型及其具体实现 的相关文章

随机推荐

  • 本地负载测试:无法打开负载测试结果数据库

    我正在使用 VS2012 创建一些负载测试 我可以使用 无 存储类型运行测试 但是当我将其更改为 数据库 存储类型时 我收到了可怕的错误 无法打开负载测试结果数据库 检查是否 加载由连接字符串指定的测试结果数据库 测试控制器 或本地机器 指
  • 如何在android中圆化textview一侧的角

    我想将文本视图的唯一一侧舍入 例如从左上角开始舍入 从右上角舍入一圈 我使用此代码 但这不起作用
  • 如何估计方法的执行时间?

    如果需要超过两秒才能完成并在另一个线程上重新启动它 我需要取消方法执行 那么 有没有什么方法 回调机制 HACK 我可以让方法通知我它超过了 2 秒的时间限制 在 C 中检查网络驱动器是否存在并超时 https stackoverflow
  • 具有特定 JsonConverter 的 MVC3 控制器

    这是设置 我有一些 MVC 控制器 旨在由 jQuery ajax 请求使用 一个正常的请求看起来有点像这样 ajax Solicitor AddSolicitorToApplication data putData type POST c
  • Groovy JSONBuilder 问题

    我正在尝试将 JsonBuilder 与 Groovy 结合使用来动态生成 JSON 我想创建一个 JSON 块 例如 type type urn value myCustomValue1 urn type urn value myCust
  • 在 Google Maps API v3 中启用新的 GL 渲染?

    最近 Google 在 GMaps 平台上推出了 Maps GL 我们有一个主要基于地图的 HTML5 应用程序 我们很乐意尝试基于 WebGL 的新地图渲染 我们已经注意到潜在的性能优势 有谁知道如何将 API v3 切换到 Maps G
  • JavaScript try-catch 忽略预期的偶然错误是不好的做法吗?

    在 JavaScript 中 使用 try catch 块并忽略错误而不是测试块中的许多属性是否为 null 是错误的吗 try if myInfo person name newInfo person name myInfo person
  • VS 2015 上的平台工具集更改

    我需要在 VS 2015 上进行一些汇编编码 为此我需要使用一个包含某些 C 函数的包含文件 该文件在 VS 2012 和 2013 上完美运行 但由于 VS 2015 上的一些库更改 据我所知 它在链接过程中出现错误 因此 建议我将平台工
  • Android 的 Html.escapeHtml 和 TextUtils.htmlEncode 之间有什么区别?我什么时候应该使用其中之一?

    Android 有两种不同的方法来转义 编码字符串中的 HTML 字符 实体 Html escapeHtml String http developer android com reference android text Html htm
  • 如何查看另一个 php 文件中定义的变量?

    我在所有 php 文件中使用相同的常量 我不想在我的所有文件中分配此变量的值 因此 我想创建一个 parameters php 文件并在那里进行分配 然后在所有其他文件中我include parameters php 并使用 paramet
  • Chrome 无法正确渲染 div 中的 span

    当跨度嵌套在具有不同背景的 div 中时 其上方和下方会出现一个小间隙 FF 不会这样渲染 这是html div style background color magenta span style background color cyan
  • IBM Worklight - 无法在 Dojo 应用程序中加载 index.html

    我已经使用 Dojo 库创建了示例 Wokrlight 项目 默认模板项目 Android 版本的应用程序在 Android 模拟器中运行良好 显示 index html 的内容 但是当我在设备中运行相同的应用程序时 它首先显示 IBM 启
  • List.AddRange() 线程安全吗?

    我可以在不锁定的情况下从多个线程安全地调用 List AddRange r 吗 如果不是的话 我会遇到什么样的麻烦呢 No 它的文档 http msdn microsoft com en us library 6sh2ey19 aspx没有
  • LNK1169 找到一个或多个多重定义的符号。我知道这可以被认为是重复的,但我找不到任何可以解决我的问题的东西[重复]

    这个问题在这里已经有答案了 我有一个老师需要的头文件 我正在使用全局变量 因此我可以将值从一个函数移动到另一个函数 查了一下问题 有人建议使用命名空间 那没有用 此外 我像其他人推荐的那样添加了一些守卫 但这也没有帮助 我有多个文件和标头中
  • IE8 标准不支持 array.map 函数?

    我没有 IE8 所以我正在从 IE10 中测试 IE8 当我切换到文档模式的 IE8 标准 时 数组对象的 javascript 映射函数给出 javascript 错误 对象不支持属性或方法 映射 但是当我切换到文档模式的 标准 时 没有
  • Java中的命令行查询

    我正在访问 MongoDB 并且希望在 Java 中重用典型的命令行查询 我知道可以使用 BasicDBObject 但我想使用如下命令行查询 db MyCollection find 我现在尝试使用数据库的 command 方法 Mong
  • 如何在新闻通讯中创建悬停效果?

    我正在创建一份时事通讯 并且我希望面板可以在鼠标悬停时更改背景颜色 鉴于时事通讯不会有标题 我正在内联定义所有样式 我很确定大多数流行的邮件客户端都会阻止 JS 所以我想知道是否可以在 style 属性中定义悬停效果 或者有没有其他方案可以
  • sed - 删除破折号之前的所有字符

    我有一个文件名列表 我想删除第一个实例之前的所有字符 因此 之前 列表中的以下名称将显示为 之后 列表中的名称 Before Adam James Welcome Home txt Mike Harry One Upon A Time tx
  • 将彩虹颜色映射到 RGB

    假设我有一个带构造函数的 RainbowColorsMapper 类RainbowColorsMapper int n 其中 n gt 2 现在我想要使用该方法获得从红色到紫色的彩虹颜色的连续映射mapper getColor int nu
  • C# 泛型及其具体实现

    是否可以在 C 中创建泛型方法并为给定类型添加具体实现 例如 void Foo