如果是普通方法.类型不定的时候你需要写以下三个方法: 字符串:Public string GetValue(string a) 整型:Public int GetValue(int a) Object:Public Object GetValue(Object a) 而采用泛型就不需要了,只要在实现的时候指定 例如类: class c1 { public T getValue<T>(T t) { T ret = default(T); ret = t; return ret; } } 调用: string s = t.getValue<string>("A"); int i = t.getValue<int>(1); object o = t.getValue<object>(new object()); 例子很简单,但是能够说明问题了.
public class MappingData { public MappingData() { } public T MappdingDataRow<T>(DataRow row) where T : new() { T t = new T(); foreach (PropertyInfo p in t.GetType().GetProperties()) { p.SetValue(t, row[p.Name], null); } return t; } public List<T> MappdingDataTable<T>(DataTable table) where T : new() { T t = new T(); List<T> list = new List<T>(); foreach (DataRow row in table.Rows) { t = this.MappdingDataRow<T>(row); list.Add(t); } return list; } } 一个简单的泛型类的应用是循环DataTable里的数据到实体类里面的,实体类就是 T,访问元数据填充这个泛型实体, ,持久层和反射的话可能也用到泛型类,还有泛型方法和泛型集合等可以限制参数类型安全等,也可以去msdn查找看看
其实C#的泛型与C++的stl还是有区别的,宏观来看泛型是被这样用了
并不是只要方法属于泛型类型,或者甚至是方法的形参的类型是封闭类型的泛型参数,就可以说方法是泛型方法。只有当方法具有它自己的类型参数列表时,才能称其为泛型方法。在下面的代码中,只有方法 G 是泛型方法。class A { T G<T>(T arg) {...} } class Generic<T> { T M(T arg) {...} }红字部分什么意思,没太读懂
回复内容太短太内涵了。
public T getValue <T>(T t) 这样的定义通常使用在父子类转换,或接口转换中
比如:getValue<int>(1);
或
getValue<Ixxx接口>(某个实现了Ixxx接口的对象实例)
List<T>. IndexOf(T item)
回复不短也不内涵了。
if (t is int) {
return t * 2;
} else if(t is string){
return t + "A";
}
}
如果想深入了解,大可以google一下:Ioc容器http://www.google.cn/search?client=pub-5434506002917399&prog=aff&channel=2000052003&q=Ioc%E5%AE%B9%E5%99%A8
字符串:Public string GetValue(string a)
整型:Public int GetValue(int a)
Object:Public Object GetValue(Object a)
而采用泛型就不需要了,只要在实现的时候指定
例如类: class c1
{
public T getValue<T>(T t)
{
T ret = default(T);
ret = t;
return ret;
}
}
调用: string s = t.getValue<string>("A");
int i = t.getValue<int>(1);
object o = t.getValue<object>(new object());
例子很简单,但是能够说明问题了.
1.IOC(控制翻转),这个应算高级用法了
2.避免重载函数(如果函数过程比较复杂,这样做有意义吗)有没有人真正在项目中用过泛型方法,望指点,另外13楼说的精华帖,实在没找到昨天反编译看了下List<T>//大概就是这样了
T[] _items;
void Add(T t){
_items[size++] = t;
}
这个结论让我非常无语,泛型出之于c++的stl。当初stl的目的可不是为了装拆箱,c++那回根本就没有装拆箱的概念
{
public MappingData()
{ } public T MappdingDataRow<T>(DataRow row)
where T : new()
{
T t = new T();
foreach (PropertyInfo p in t.GetType().GetProperties())
{
p.SetValue(t, row[p.Name], null);
}
return t;
} public List<T> MappdingDataTable<T>(DataTable table)
where T : new()
{
T t = new T();
List<T> list = new List<T>(); foreach (DataRow row in table.Rows)
{
t = this.MappdingDataRow<T>(row);
list.Add(t);
}
return list;
}
}
一个简单的泛型类的应用是循环DataTable里的数据到实体类里面的,实体类就是 T,访问元数据填充这个泛型实体,
,持久层和反射的话可能也用到泛型类,还有泛型方法和泛型集合等可以限制参数类型安全等,也可以去msdn查找看看
{
T G<T>(T arg) {...}
}
class Generic<T>
{
T M(T arg) {...}
}红字部分什么意思,没太读懂
.net的泛型确实是为 优化拆箱装箱而设计的。因为是2005才有的特性,2003不具备泛型。c++我没用过,没有发言权。但如果是为了继承C++的特性的话,那我想应该在2003就开始启用。正是2003里大量拆装箱操作 让MS意识到自己该做点什么了。所以才有了2005的泛型。
当然,我是这样看的,仅仅代表我的看法。