谈谈泛型要求子类必须继承自当前类的事情

幽幽有悠悠呦 2018-03-27 11:50:01
/**
有这么个需求
想对属性上的泛型做约束,要求这个泛型只能是当前类的子类。
*/
public class TestClass<T> where T : TestClass{//这个方案约束泛型T必须继承自当前类。。。编译报错。。。因为约束中的当前类又有泛型,无限递归
public List<T> poolTest1 where T : TestClass;//属性上的泛型约束。不存在这种写法。。
}
//怎么才能实现这个需求?
...全文
421 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
随便举一个向前链表的例子:
class ALink<T>
{
    public ALink<T> Prev;
    public T Value;
}
这里,实际的 Prev 定义是讲求实际的,既然已经在定义 Alink<T> 内部了,还去纠缠什么“T where”这里的语法到底是要干什么呢? 不看实际内容,而纠结到表面的语法,多做了不必要的事情,其实不是更懂 class 和 泛型,反而是因为概念太多太绕而出问题。
  • 打赏
  • 举报
回复
引用 楼主 huangfu6long 的回复:
//怎么才能实现这个需求?
理解面向对象分析和设计的本质,就能解决问题。
  • 打赏
  • 举报
回复
你这还用什么泛型? 能不用泛型就不用泛型、能不用类型就不用类型。真正会用泛型的人不会去在根本不用泛型时而为了泛型而泛型的。 如果需要父类、接口,那么就用父类和接口。正因为有了父类和接口才有了抽象,而不是因为一些人喜欢循环思维方式而抽象。
幽幽有悠悠呦 2018-03-27
  • 打赏
  • 举报
回复
感谢。没见过这种写法。
引用 5 楼 starfd 的回复:
public class TestClass{}
public class TestClass<T>:TestClass whereT:TestClass {}
微软那么多类似例子你不会看下的……
  • 打赏
  • 举报
回复
public class TestClass{}
public class TestClass<T>:TestClass whereT:TestClass {}
微软那么多类似例子你不会看下的……
cheng2005 2018-03-27
  • 打赏
  • 举报
回复
想清楚你的需求再来做设计,你可以在纸上把你所谓的父类和子类的关系好好画个图,理解一下。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧