问一个泛型方法的问题

chichenzhe 2012-08-31 10:09:42

public T GetDatas<T>() where T : IDatas
{
if(this.taskType == ETaskType.DEFAULT_TASK)
{
return (T)this.dds;
}
else
{
return (T)this.cds;
}
}


要达到这个效果该怎么写?
dds,cds等成员变量继承于 IDatas

我想根据当前类的 枚举来判断返回不同的 T.
...全文
130 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chichenzhe 2012-08-31
  • 打赏
  • 举报
回复
对. 是这样. 只为外界不用 强转了.

实际上我提供2个属性出去也行.... 真折腾.
SQL77 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
我解决了.
http://topic.csdn.net/u/20110927/14/07ed6192-eaba-4d95-bf99-78f4df05621b.html

这个给了答案, 转T之前强转成object即可...
[/Quote]
你实现了相同的接口。就算你不转OBJECT也可以直接转。
这样你还是强制转换成子类一样的道理。
chichenzhe 2012-08-31
  • 打赏
  • 举报
回复
我解决了.
http://topic.csdn.net/u/20110927/14/07ed6192-eaba-4d95-bf99-78f4df05621b.html

这个给了答案, 转T之前强转成object即可...
chichenzhe 2012-08-31
  • 打赏
  • 举报
回复
我要实现需求. 提供给外界一个优雅的出口而已...

内部实现外部根本不关心.

并且我这个做法不伤效率,也不伤可读性. 没什么不可以.

我提供2个属性 给外界 ,然后外界用 枚举判断自己到底要选择哪个属性一样可以实现 -- 但是我为什么要让外界调用我的方法这么麻烦呢.
cheng2005 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
怎么这么武断.

dds 内挂载3个 对象类型 成员变量的属性

cds 内挂载4个 值类型的 成员变量的属性.

我要访问这些东西 怎么可能通过 IDatas 呢. 如果非要返回 IDatas 的话最终我还是不得不强转回子类
[/Quote]
那么首先明确一个问题,在你这种使用需求下,你定义的IDatas 接口本身没有意义,实际只是在利用语法而已。
这种设计本身就不是很合理的,属于接口滥用。
chichenzhe 2012-08-31
  • 打赏
  • 举报
回复
http://zhidao.baidu.com/question/439541252.html
还有, 这个人为什么可以那么实现?
chichenzhe 2012-08-31
  • 打赏
  • 举报
回复
怎么这么武断.

dds 内挂载3个 对象类型 成员变量的属性

cds 内挂载4个 值类型的 成员变量的属性.

我要访问这些东西 怎么可能通过 IDatas 呢. 如果非要返回 IDatas 的话最终我还是不得不强转回子类
chichenzhe 2012-08-31
  • 打赏
  • 举报
回复
返回IDatas 之后还要强转成子类(这是可行的,但我需求是泛型啊). 因为接口只是个架子摆在那 ,我没定义接口方法.

实际上 dds 和 cds 是2个完全不同的东西,没有任何共性. 只不过我强行让他们 实现了 IDatas 接口而已.
cheng2005 2012-08-31
  • 打赏
  • 举报
回复
没看出来有使用范型的必要,直接返回就可以了
public IDatas GetDatas()
{

}
SQL77 2012-08-31
  • 打赏
  • 举报
回复
public IDatas GetDatas() {
if(this.taskType == ETaskType.DEFAULT_TASK)
{
return this.dds;
}
else
{
return this.cds;
}
}

直接返回IDatas不可以么?
datafansbj 2012-08-31
  • 打赏
  • 举报
回复
过度设计了不是?

110,535

社区成员

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

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

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