对于泛型的一些疑问

树莓派 2010-08-25 10:22:39
public class ObjectBase<T> : IEntity, IComparable where T : ObjectBase<T>
...全文
160 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeven_xiao 2010-08-26
  • 打赏
  • 举报
回复
public class ObjectBase<T> : IEntity, IComparable where T : ObjectBase<T>
这里描述的约束为:
ObjectBase<T>这个类,需要实现2个接口:IEntity和IComparable
同时,T应当是继承自ObjectBase<T>的子类。
那么,T本身就嵌套递归声明,只是不知道如何写出这样类型的子类。

就是这样子了`
树莓派 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wuyazhe 的回复:]

引用 9 楼 visualbasic2000 的回复:
如果写成
public class ObjectBase<T> : IEntity, IComparable where T : IEntity, IComparable
编译也没有问题的,但是这样子从理解上说,可能好一点


不同的。

public class ObjectBase<T> : IEntity, IComp……
[/Quote]

代码里面的子类如下
public class BlogPost : ObjectBase<BlogPost>, IAppData, IShareData, IHits
兔子-顾问 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 visualbasic2000 的回复:]
如果写成
public class ObjectBase<T> : IEntity, IComparable where T : IEntity, IComparable
编译也没有问题的,但是这样子从理解上说,可能好一点
[/Quote]

不同的。

public class ObjectBase<T> : IEntity, IComparable where T : ObjectBase<T>
这里描述的约束为:
ObjectBase<T>这个类,需要实现2个接口:IEntity和IComparable
同时,T应当是继承自ObjectBase<T>的子类。
那么,T本身就嵌套递归声明,只是不知道如何写出这样类型的子类。
RichardYE0922 2010-08-25
  • 打赏
  • 举报
回复
这样的的泛型约束不是很好,有点循环限制
树莓派 2010-08-25
  • 打赏
  • 举报
回复
但是从表达理解上说的话,ObjectBase的泛型限制是ObjectBase,有点拗口的感觉
简介不是好事情,容易理解比较重要
天下如山 2010-08-25
  • 打赏
  • 举报
回复
public class ObjectBase<T> : IEntity, IComparable where T : ObjectBase<T>
这样子看起来不是简洁点吗?
树莓派 2010-08-25
  • 打赏
  • 举报
回复
如果写成
public class ObjectBase<T> : IEntity, IComparable where T : IEntity, IComparable
编译也没有问题的,但是这样子从理解上说,可能好一点
树莓派 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 peter200694013 的回复:]

public class ObjectBase<T> : IEntity, IComparable where T : ObjectBase<T>

ObjectBase<T> : IEntity, IComparable
是ObjectBase<T>实现接口
where T : ObjectBase<T>
是对T的限制
[/Quote]
我的疑问是Where条件这样的写法是否合理 一个类的泛型的限制条件是它自己,这个有疑问
Peter200694013 2010-08-25
  • 打赏
  • 举报
回复
public class ObjectBase<T> : IEntity, IComparable where T : ObjectBase<T>

ObjectBase<T> : IEntity, IComparable
是ObjectBase<T>实现接口
where T : ObjectBase<T>
是对T的限制

树莓派 2010-08-25
  • 打赏
  • 举报
回复
是不是写成这个样子比较好啊
public class ObjectBase<T> where T : IEntity, IComparable
树莓派 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sibiyellow 的回复:]

是不是表示T限制于: IEntity, IComparable?
我也不是很懂
[/Quote]
从实际代码来看,的确是这个意思,但是 where T : ObjectBase<T> 这样子的写法我觉得挺奇怪的
明明说明了 ObjectBase 要实现 IEntity, IComparable ,后面又添加了这个Where子句。。。
一来,有些重复了,二来,自己限制自己,蛮不能接受的
树莓派 2010-08-25
  • 打赏
  • 举报
回复
public class BlogPost : ObjectBase<BlogPost>, IAppData, IShareData, IHits
BlogPost : ObjectBase<BlogPost> 这样写的话,继承关系总觉得不是很好
C#这样的语法的意思不是很理解,SuperClass里面出现了subClass名称。。。。
请各位指教一下,或者有更加好的写法,请告诉我
天下如山 2010-08-25
  • 打赏
  • 举报
回复
是不是表示T限制于: IEntity, IComparable?
我也不是很懂
树莓派 2010-08-25
  • 打赏
  • 举报
回复
这样子的语句里面 T 的限制又是 Object<T> 这样子的写法是否规则?
这样子的写法的意思是什么呢?
一克代码 2010-08-25
  • 打赏
  • 举报
回复
什么意思啊 !
bourbon1795 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wuyazhe 的回复:]
引用 9 楼 visualbasic2000 的回复:
如果写成
public class ObjectBase<T> : IEntity, IComparable where T : IEntity, IComparable
编译也没有问题的,但是这样子从理解上说,可能好一点


不同的。

public class ObjectBase<T> : IEntity, ICompa……
[/Quote]

正解了,我试下,没有能声明。

111,093

社区成员

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

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

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