C#的泛型
一、泛型的概念
允许我们延迟编写类或方法中的数据类型,直到真正使用时确定类型的一种规范
为什么要 用泛型:
1. 编写程序时,经常遇到两个模块的功能非常相似,区别只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,我们只能分别写多个方法处理每个数据类型,因为方法的参数类型不同。
2. 针对 1 的情况,想到用object,来解决这个问题。但是这种方式有很大缺陷:
(1)会出现装箱、折箱操作,这将在托管堆上分配和回收大量的变量,性能损失非常严重。
(2)在处理引用类型时,虽然没有装箱和折箱操作,但将用到数据类型的强制转换操作,增加处理器的负担。
二、泛型的方法
定义泛型方法需要在方法名和参数列表之间加上<>,并在其中使用 T 来代表参数类型。
实际上 T 可以用任何有效名称代替 ,也可以设置中文
-
static void Main(string[] args)
-
{
-
//调用
-
-
// a可以是任何类型
-
TestMothod<int>(10);
-
TestMothod<string>("abc");
-
TestMothod<float>(12.0f);
-
}
-
-
-
-
//定义
-
-
public static void TestMothod<T>(T a) {
-
-
Console.WriteLine(a.GetType().ToString());
-
}
三、泛型类
泛型类的定义与泛型方法类似,是在泛型类的名称后面加上<T>,当然,也可以定义多个类型,即“<T1,T2,・・・>“
-
static void Main(string[] args)
-
{
-
//调用
-
-
//创建泛型类的对象
-
-
FanXingClass<int> fanXingClass =new FanXingClass<int>();
-
fanXingClass.Age = 10;
-
fanXingClass.Cge = 20;
-
fanXingClass.FanXingMothod(300);
-
fanXingClass.FanXingMothod1(50,60);
-
}
-
-
-
//定义泛型类
-
public class FanXingClass<T,C>
-
{
-
-
public T Age { get; set; }
-
-
public C Cge { get; set; }
-
public void FanXingMothod(T a)
-
{
-
-
Console.WriteLine(a.GetType().ToString());
-
-
}
-
public void FanXingMothod1(T a, C b)
-
{
-
Console.WriteLine(a.GetType().ToString());
-
Console.WriteLine(b.GetType().ToString());
-
}
-
-
}
四、泛型约束
几个常用的泛型约束:
where T : struct 约束 T 必须是值类型
where K : class 约束 K 必须是引用类型
where V : IClass<T> 约束 V 必须继承 IClass<T> 接口
where W : className 约束 W 必须是 className 类型,或者是 className 类型的子类
where X : class, new() 约束 X 必须是引用类型,并且有一个无参数的构造函数,当有多个约束时,new()必须写在最后
-
static void Main(string[] args)
-
{
-
//泛型约束调用
-
-
FanXingYueSu<int, string> fanXingYueSu = new FanXingYueSu<int, string>();
-
fanXingYueSu.FanXingYueSuMothod(102);
-
fanXingYueSu.FanXingYueSuMothod1("abc");
-
-
}
-
-
class FanXingYueSu<T,K> where T :struct where K :class //各个泛型约束之间用空格隔开
-
{
-
-
public void FanXingYueSuMothod(T a) {
-
-
Console.WriteLine(a.GetType().ToString());
-
-
}
-
public void FanXingYueSuMothod1(K a)
-
{
-
Console.WriteLine(a.GetType().ToString());
-
-
}
-
-
}
五、泛型集合
概念
泛型集合是泛型中最常见的应用,主要用于约束集合中存放的元素。
1. ArrayList 动态数组 :
ArrayList的优点:
(1) ArrayList大小是按照其中存储的数据来动态扩充与收缩的
(2) ArrayList 在声明对象时并不需要指定它的长度
(3) ArrayList可以很方便地进行数据的添加插入删除
(4) ArrayList 可以存储任意类型
ArrayList的缺点:
(1) ArrayList在存储数据时使用object类型进行存储的
(2) ArrayList不是类型安全的,使用时很可能出现类型不匹配的错误,就算都插入了同一类型的数据,使用时我们也需要将它们转化为对应的原类型来处理
(3) ArrayList 存储在装箱和拆箱操作,导致其性能低下
2. List 泛型集合
List与数组比较类似,都用于存放一组值。
List的元素长度不固定 数组必须固定
定义个int类型泛型集合:
-
List<int> IntList = new List<int>();
-
//加入
-
IntList.Add(1);
-
-
//删除
-
IntList.RemoveAt(0);
加入自定义的类型
-
//使用对象初始化器 c#语法糖
-
List<Person> persons = new List<Person>();
-
Person person = new Person()
-
{
-
Age = 18,
-
Height = 175,
-
Name = "gentle"
-
-
};
-
persons.Add(person); //将整个对象添加到集合中
-
-
-
public class Person
-
{
-
public int Age { get; set; }
-
public int Height { get; set; }
-
public string Name { get; set; }
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhghegeb
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13