[C#复习向整合]泛型

泛型实现类型参数化,相当于类型占位符.

语法:

class 类名<泛型占位字母>

interface 接口名<泛型占位字母>

返回值 函数名<泛型占位字母>(参数列表)

泛型占位字母可以有多个,用逗号分开.

class TestClass<T>
{
    publid T value;//一个类型为T的变量value
}


//使用时
TestClass<int> t = new TestClass<int>();//t的value变量为int类型了
TestClass<string> t2 = new TestClass<string>();//t2的value变量为string类型了
//声明之后不能改变类型了

class Testclass<T,M,Key>//泛型不仅可以是基本类型,还可以是自定义类
{
    public T value1;
    public M value2;
    public Key value3;
}

//使用
TestClass2<int,float,string> t3 = new TestClass2<int,float,string>();
interface TestInterface<T>
{
    T value
    {
        get;
        set;
    }
}

//使用
class Test : TestInterface<int>
{
    public int value
    {
        get;
        set;
    }
}

普通类中的泛型方法

class Test
{
    public void TestFun<T>(T value)
    {
        Console.WriteLine(value);
    }

    public void TestFun<T>()
    {
        T t = default(T);//获得T类型的默认值
        //这里不能直接给t初始值,因为t还不知道类型,所以要用default(T)
    }
    public T TestFun<T>(string v)
    {
        return default(T);
    }
    public void TestFun<T,K,L>()
    {
        //...
    }
}

//使用
Test t = new Test();
t.TestFun<string>("asdf");

泛型类的泛型函数

class Test2
{

}
//注意,普通类和泛型类可以同名,他们不是一个东西,他们之间没有关系
class Test2<T>
{
    public T value;

    public void TestFun<T>(T value)
    {
        //注意,这种函数不叫泛型函数!
        //因为在类被声明时,T已被指定类型了,再次调用函数相当于是普通函数
        //参数只能填写类声明时填写的类型了
        //调用时直接TestFun(value)
    }
    public void TestFun<K>(K value)
    {
        //这样可以!
        //用另外的泛型占位字母,与泛型类占位字母区别即可
        //调用时TestFun<类型>(value)
        //或者可以直接省略TestFun(value),会根据参数类型自动决定泛型类型
    }
}

使用泛型可以避免一定程度的装箱拆箱

class ArrayList<T>
{
    private T[] array;
    public void Add(T value){}
    public void Remove(T value){}
}

参考资料<唐老狮C3教程>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值