求泛型的简单实例和泛型的用处,越通俗越好 初学,一直看不明白泛型用来干嘛的?什么时候要用到,求个最简单通俗的例子加说明 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 generic,其实就是通用的意思。 比如我们需要使用列表的时候定义了一个 StringList类用来操作字符串数组,过一段时间又需要处理整数的时候就需要再定义一个 IntegerList,处理用户的时候又需要再定义一个UserList,以后可能需要定义更多,它们的功能完全相同,只是处理的类型不一样。有了泛型以后,只需要定义一个 List<T> 就能满足所有要求,.. List<string> , List<int> , List<User>...没系统学习过.net,仅是自己的理解。 using System;class Test{ static void Main() { Console.WriteLine(Max(1)); // 输出: 1 Console.WriteLine(Max(.3, -.5)); // 输出: 0.3 Console.WriteLine(Max(0M, -3M, 3.14M)); // 输出: 3.14 Console.WriteLine(Max(9f, -1f, 3.14f, -2.718f)); // 输出: 9 Console.WriteLine(Max(0u, 23u, 3114u, 120718u, 5678u)); // 输出: 120718 } // 求一组数值的最大值 static T? Max<T>(params T[] x) where T: struct, IComparable { if (x.Length == 0) return null; T a = x[0]; foreach (T i in x) if (a.CompareTo(i) < 0) a = i; return a; }} 泛型的基本优点在于好用,数组长度是动态的;安全,指定了T的类型;减少了开销,避免了以前ArrayList或Hashtable中将object类和具体类之间相互转换所带来的开销。 泛型提供了一种很好的复制手段,且提高了扩展性泛型会产生更高的代码重用,更好的性能,强类型检查和易读的代码http://topic.csdn.net/u/20090622/21/DF7F7B8A-61CD-4C8F-A964-0FE15377523D.html 泛型类 方法 同一般的类似List<string> list=new List<string>(); //List是个泛型类 如:public class List<T> {} public class Csdn<T> { public T GetUser<T>(T t) { return t; } }static void Main(string[] args) { Csdn<int> cs = new Csdn<int>(); Console.WriteLine(cs.GetUser(1)); //1; Console.WriteLine(cs.GetUser<int>(1)); //1; Console.WriteLine(cs.GetUser<string>("12"));//12; Console.Read(); } 1、类型安全问题。泛型是强类型的,即编译时可以检查出类型错误;非泛型则不行;2、性能问题。泛型用于值类型是不需要装箱操作,而非泛型的频繁装箱和拆箱导致性能下降。基本上可以这么说,你可以放弃目前所有集合类的非泛型版本,改用泛型版本,这样你可以获得最佳性能和最好的安全性。当然凡事有利有弊,泛型唯一的缺点是生成可执行代码尺寸要比非泛型版本大一些。参见:http://msdn.microsoft.com/zh-cn/library/b5bx6xee(VS.80).aspx 求助 C# 有关Timer的应用问题 请问如何获取这个真实的网址 各位大仙帮忙 关于net3.5 wpf 托盘程序 韩文和中文互相转换怎么做啊? 我想用C#做一个监控剪贴版的程序,不知C#怎么接收消息的? 求指教~ 我编写的动态链接库怎么让别人不能反编译和调用啊? 如何将xml文件读取到dataGridView中啊 用C#怎样实现QQ那样的热键调出窗口的功能? c#多线程如何锁定com组件 listbox添加图片
比如我们需要使用列表的时候定义了一个 StringList类用来操作字符串数组,过一段时间又需要处理整数的时候就需要再定义一个 IntegerList,处理用户的时候又需要再定义一个UserList,以后可能需要定义更多,它们的功能完全相同,只是处理的类型不一样。有了泛型以后,只需要定义一个 List<T> 就能满足所有要求,.. List<string> , List<int> , List<User>...
没系统学习过.net,仅是自己的理解。
{
static void Main()
{
Console.WriteLine(Max(1)); // 输出: 1
Console.WriteLine(Max(.3, -.5)); // 输出: 0.3
Console.WriteLine(Max(0M, -3M, 3.14M)); // 输出: 3.14
Console.WriteLine(Max(9f, -1f, 3.14f, -2.718f)); // 输出: 9
Console.WriteLine(Max(0u, 23u, 3114u, 120718u, 5678u)); // 输出: 120718
} // 求一组数值的最大值
static T? Max<T>(params T[] x)
where T: struct, IComparable
{
if (x.Length == 0) return null;
T a = x[0];
foreach (T i in x)
if (a.CompareTo(i) < 0) a = i;
return a;
}
}
泛型提供了一种很好的复制手段,且提高了扩展性
泛型会产生更高的代码重用,更好的性能,强类型检查和易读的代码http://topic.csdn.net/u/20090622/21/DF7F7B8A-61CD-4C8F-A964-0FE15377523D.html
{
public T GetUser<T>(T t)
{
return t;
}
}
static void Main(string[] args)
{
Csdn<int> cs = new Csdn<int>();
Console.WriteLine(cs.GetUser(1)); //1;
Console.WriteLine(cs.GetUser<int>(1)); //1;
Console.WriteLine(cs.GetUser<string>("12"));//12;
Console.Read();
}
2、性能问题。泛型用于值类型是不需要装箱操作,而非泛型的频繁装箱和拆箱导致性能下降。基本上可以这么说,你可以放弃目前所有集合类的非泛型版本,改用泛型版本,这样你可以获得最佳性能和最好的安全性。当然凡事有利有弊,泛型唯一的缺点是生成可执行代码尺寸要比非泛型版本大一些。参见:http://msdn.microsoft.com/zh-cn/library/b5bx6xee(VS.80).aspx