为了账号安全,请及时绑定邮箱和手机立即绑定

"where T : class" VS 扩展方法中的常规类

"where T : class" VS 扩展方法中的常规类

C#
慕姐4208626 2021-09-19 16:49:59
我想要以下两个扩展方法声明之间的技术差异以及何时使用一个而不是另一个:public static void DoSomething(this MyClass theObject)对比public static void DoSomething<T>(this T theObject) where T : MyClass例如,我知道将 this 与从MyClass类继承的类的对象一起使用时会有所不同,但我不知道为什么。
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

假设这个实现:


public static List<T> DoSomething<T>(this T theObject) where T : MyClass

    => new List<T>();

调用为


MyChildClass x;  // MyChildClass : MyClass

var list = DoSomething(x); 

// list is an instance of List<MyChildClass>, instead of List<MyClass>

当您不需要知道“实际”(子)类型时,首先使用(非泛型)。


当您计划在进一步的泛型代码中使用“实际”类型时,请使用第二个(泛型)。


当有人将类/函数设计为泛型时,我将其视为“气味”,即使它“不需要”泛型 = 基类型就足够了。(等效的“通用” impl 更难阅读)


查看完整回答
反对 回复 2021-09-19
  • 1 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信