导航
  • 主页
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm
  • WPF
  • 问答

对于泛型的一些疑问

树莓派 2010-08-25 10:22:39
public class ObjectBase<T> : IEntity, IComparable where T : ObjectBase<T>
...全文
114 点赞 收藏 16
写回复
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]

正解了,我试下,没有能声明。
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.