对于泛型的一些疑问

树莓派 2010-08-25 10:22:39
public class ObjectBase<T> : IEntity, IComparable where T : ObjectBase<T>
...全文
139 16 打赏 收藏 举报
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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]

正解了,我试下,没有能声明。
  • 打赏
  • 举报
回复
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2010-08-25 10:22
社区公告

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