日期:2014-05-18  浏览次数:20885 次

C# 中的泛型
public myclass<T>
泛型类中的<T>是表示如果是泛型必须用T还是可以用别的字符或类型,如int,假如是int,是啥意思?如果是指定了具体类型int,那还叫泛型干吗?

顺便请解释一下下面这个结构:
 public static List<T> Deserialize(string fileName, string ruleName){}

------解决方案--------------------
不必是T的,可以用其他字符代替,当然不能是特殊的标识符,比如INT.
上面的方法,也不太懂。菜鸟回答。
------解决方案--------------------

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

在你的例子中,如果类是使用int来初始化T的话,则Deserialize返回的是List<int>,同理用string的话就是List<string>,这在对不同数据类型进行类似处理时可以大幅提升开发效率。
------解决方案--------------------
随便什么字符都可以,只要不是标识符,当然也必须符合变量命名规则

解释的话看英文好像是反序列化文件成List<T>
------解决方案--------------------
可以把int 改成object 那就更像了。
那你同一个List 元素有的是int有的是string 有的是long 有的是decimal...

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

下面我封装一下:
你自己 可以拆了:
C# code
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);

------解决方案--------------------
用这个方式,可以对付xml 格式的数据!
------解决方案--------------------
这样说吧,如果没有泛型,你就需要写IntList,StringList,DoubleList,UserList
泛型提供了一种编译前代码复用的一种手段。
------解决方案--------------------
没有具体的限制,除了语言的保留字,空间名,或者API类名,都可以
------解决方案--------------------
(1)不能使用具体类型,否则就不是泛型了。

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

(2)public static List<T> Deserialize(string fileName, string ruleName){}
从名字上看,是根据规则、文件名做反序列化,得到一个 List 列表。