C# 中的泛型

隐者神归 2012-02-25 04:00:35
public myclass<T>
泛型类中的<T>是表示如果是泛型必须用T还是可以用别的字符或类型,如int,假如是int,是啥意思?如果是指定了具体类型int,那还叫泛型干吗?

顺便请解释一下下面这个结构:
public static List<T> Deserialize(string fileName, string ruleName){}
...全文
117 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2012-02-25
  • 打赏
  • 举报
回复
(1)不能使用具体类型,否则就不是泛型了。

你可以这么用:
class IntegerList : List<int> { } // 从泛型类继承。
class MyList<T> where T : SomeType { } // T 必须是 SomeType 或它的子类。

(2)public static List<T> Deserialize(string fileName, string ruleName){}
从名字上看,是根据规则、文件名做反序列化,得到一个 List 列表。
wangweihe68 2012-02-25
  • 打赏
  • 举报
回复
没有具体的限制,除了语言的保留字,空间名,或者API类名,都可以
nonocast 2012-02-25
  • 打赏
  • 举报
回复
这样说吧,如果没有泛型,你就需要写IntList,StringList,DoubleList,UserList
泛型提供了一种编译前代码复用的一种手段。
hetengfei_ 2012-02-25
  • 打赏
  • 举报
回复
用这个方式,可以对付xml 格式的数据!
hetengfei_ 2012-02-25
  • 打赏
  • 举报
回复
可以把int 改成object 那就更像了。
那你同一个List 元素有的是int有的是string 有的是long 有的是decimal...

当然,List 的元素的可以 是一个List 那就可以有标记性的装载了

下面我封装一下:
你自己 可以拆了:
List<object> l = new List<object>();
object[] node1 = new object[2]{ "int", 10 };
object[] node2 = new object[2] {"string", "今天天气太好了" };
l.Add(node1);
l.Add(node2);
  • 打赏
  • 举报
回复
随便什么字符都可以,只要不是标识符,当然也必须符合变量命名规则

解释的话看英文好像是反序列化文件成List<T>
Bullatus 2012-02-25
  • 打赏
  • 举报
回复

举例来说,List<T>提供给你int,string,double等多种数据类型的List,而不需要为每一种数据类型定义一次List类。

在你的例子中,如果类是使用int来初始化T的话,则Deserialize返回的是List<int>,同理用string的话就是List<string>,这在对不同数据类型进行类似处理时可以大幅提升开发效率。
liansh 2012-02-25
  • 打赏
  • 举报
回复
不必是T的,可以用其他字符代替,当然不能是特殊的标识符,比如INT.
上面的方法,也不太懂。菜鸟回答。

110,561

社区成员

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

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

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