请高手指点下!!谢谢!
解决方案 »
- 求助防崩溃方案(只能给200分,有好的方案另开贴加分)
- C#解决方案里文件夹的GUID
- 求数据库备份还原代码!!
- 算法大擂台:看看谁的算法效率最高(用时最短),把一串数字转化为随机字母(数字在20位以上)
- 100分献给大虾,一个窗体传值的问题搞得我郁闷了一晚上!求助。。
- [求助]Repeater嵌套RadioButtonList读数据库问题
- 奇怪的问题:一段代码在一个窗体可以运行,在另一个窗体却不行。。。
- 我用foreach语句读取dataview筛选的数据为什么会读出所有的数据?
- C# 中怎么使用API InternetGetConnectedStateEx?
- C#获取游戏控制器的输入
- gridview列标题栏排序影响position?
- 问个问题人月计算方法顺便散点分
class A<T>{
T Tp{get;set;}//C#3.0
}...
A<int> a;
a.Tp=30A<string> a2;
a2.Tp="xp"
string x=a2.Tp;...
这是一个集合.这里我们定义两个不同类型的变量
String Name = "123";
Int64 Score = 100;list.Add(Name); -- 保存进入String Name 变量
list.Add(Score); -- 保存进入 Int64 Score 变量注意这里所有类型的都可以往里放现在我们把变量取出来 放入另外一个变量中.
String sName = list[0].ToString();
Int64 xScore = (int)list[1];这就取出来了两个变量, 我们注意到这里取出两个变量都需要转换类型, 因为保存到集合里都是Object类型的.如果换作泛型List<String> list = new List<String>(); -- 这里定义了一个可以存放String 类型的泛型我们在存数据的时候list.Add(Name) -- 存入String 类型的数据. 可以执行.
list.Add(Score) -- 存入 Int64 类型的数据. 注意,这里编译器会报错.通过添加数据我们发现, 泛型不能添加它所制定类型意外的数据类型.
也就是说在一定程度上避免了数据混乱. 但是有利也有弊.下面我们来取出数据.String sName = list[0]; -- 和集合不同, 虽然它也是object 类型, 但是取出时不用拆箱. 也就是不用转换类型.
通过以上实例说明.
集合和泛型都可以存入不限量的数据.
但是集合可以存入所有类型的数据,泛型只可以存入于之对应的程序.
集合取出数据需要拆箱,而泛型不需要.泛型作为微软大力推荐的一个新技术, 其实是保证了我们使用当中可能造成的数据混乱的出错率.
其次泛型还是和HashTable类似的 Dictionary<K,V> 也是这样的区别..
回答完毕.
1. performance: 主要针对值类型,.net1.1中,将值类型放入collection需要boxing 和unboxing,有一定的性能消耗
2. Type Safety: .net1.1的collection只接受object类型的参数,用户有可能放入不同类型的实例,读出时必须cast成正确的引用,否则产生异常。
3. Binary Code Reuse:不想C++ templates。net2.0中的generic不需要访问源代码。也就你可以使用一个assembly中的generic class.
4. Code Bloat:我们都知道generic class会造成代码膨胀,因为需要为每种使用的类型生成一份IL Code,以支持这种类型。但是.net让所有引用类型的参数共享一份IL code,因为引用类型只是一个内存地址,只占用4 bytes(在32bit系统上)good luck
2.提高了代码通用性.在某些地方使用泛型可以使代码极大地简化.我有一个贴子也是涉及到了这方面的问题,可以探讨一下:http://topic.csdn.net/u/20071202/17/1f68c9b5-817b-49c8-8190-234672f174b8.html
用户对象
class user{
int userid
string username
string password
string userrolepublic user(){}
}
List<user> 就是存在内存中的表你想做什么,很方便,ORM类似的思想