黑马程序员技术交流社区
标题:
C#泛型的理解和应用场景?
[打印本页]
作者:
阮佳佳
时间:
2012-12-25 09:19
标题:
C#泛型的理解和应用场景?
最好举例说明。
作者:
苗昆明
时间:
2012-12-25 11:55
泛型最主要最用之一是用到集合中,泛型集合可以对元素的类型进行约束,使类型安全。不是所允许的类型是无法添加到泛型集合中的。
还有一点就是泛型的性能比较高,因为它们固定了类型就不用像ArrayList那样用到元素的时候需要装箱/拆箱的过程。
作者:
许晓华
时间:
2012-12-25 15:31
本帖最后由 许晓华 于 2012-12-25 15:32 编辑
楼上谈了泛型的类型安全与高效率的优点。我再补充一个泛型非常重要的优点:代码重用
先看一段重用性低的代码(没有使用泛型)
using System;
class Program
{
static void Main(string[] args)
{
int a = 2;
int b = 9;
Console.WriteLine("初始时a={0},b={1}", a, b);
Swap(ref a, ref b);
Console.WriteLine("交换后a={0},b={1}", a, b);
float c = 2.5F;
float d = 9.9F;
Console.WriteLine("初始时a={0},b={1}", c, d);
Swap(ref c, ref d);
Console.WriteLine("交换后a={0},b={1}", c, d);
string e = "Hello";
string f = "World";
Console.WriteLine("初始时a={0},b={1}", e, f);
Swap(ref e, ref f);
Console.WriteLine("交换后a={0},b={1}", e, f);
}
public static void Swap(ref int a, ref int b)
{
int c;
c = a;
a = b;
b = c;
}
public static void Swap(ref float a, ref float b)
{
float c;
c = a;
a = b;
b = c;
}
public static void Swap(ref string a, ref string b)
{
string c;
c = a;
a = b;
b = c;
}
}
复制代码
作者:
许晓华
时间:
2012-12-25 15:34
本帖最后由 许晓华 于 2012-12-25 15:35 编辑
再看一下使用泛型改写后的重用性高的代码
using System;
class Program
{
static void Main(string[] args)
{
int a = 2;
int b = 9;
Console.WriteLine("初始时a={0},b={1}", a, b);
Swap(ref a, ref b);
Console.WriteLine("交换后a={0},b={1}", a, b);
float c = 2.5F;
float d = 9.9F;
Console.WriteLine("初始时a={0},b={1}", c, d);
Swap(ref c, ref d);
Console.WriteLine("交换后a={0},b={1}", c, d);
string e = "Hello";
string f = "World";
Console.WriteLine("初始时a={0},b={1}", e, f);
Swap(ref e, ref f);
Console.WriteLine("交换后a={0},b={1}", e, f);
}
public static void Swap<T>(ref T a, ref T b)
{
T c;
c = a;
a= b;
b= c;
}
复制代码
作者:
许晓华
时间:
2012-12-25 15:36
可以看到泛型方法Swap<T>替换了上面3个swap函数的重载版本,大大提高了代码的可重用性
作者:
杭州-杨
时间:
2012-12-25 15:53
泛型理解为,就是数组化一个对象Object,比如List<这是一个类名> A =New List<>; A.add其实增加元素,我个人理解就好比 string[] a 无非这个a必须定义一共有多少个元素,而List不用定义有多少个元素,一般用在不确定的元素的集合,并且A已经被确定为是字符串类型,而List则可以定义不同的,例如类,结构,字符,数字等等
作者:
管冉
时间:
2012-12-26 01:18
基础测试抽到这个题目:
将几个int、字符串添加到ArrayList中,然后序列化到文件中,再反序列化回来。
昨天提问的 没人回答
原来是泛型啊
序列化和反序列化又是怎么实现的啊??
作者:
黄林
时间:
2012-12-26 14:14
他们说得差不多了,C#泛型可以理解运行库动态生成的模板(C++),从泛型继承:当我们需要定义自己的集合类(比如设计一个扑克游戏,初始化一副牌Cards),这时我们可以用两种方法,List<Card> cards=new List<Card>(); public class Cards:List<Card>{}后者和前者效果一样,但后者可以在必要的时候为Cards类添加其它成员和构造函数等。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2