C# 泛型

概念

泛型实现了类型参数化,达到代码重用目的

通过类型参数化来实现同一份代码上操作多种类型

泛型相当于类型占位符

定义类或方法时使用替代符代表变量类型

当真正使用类或者方法时再具体指定类型

泛型分类

泛型类和泛型接口

基本语法:

class 类名<泛型占位字母>

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

泛型函数

基本语法:函数名<泛型占位字母>(参数列表)

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

泛型类和接口

class TestClass<T>

{

public T value;

}

class TestClass2<T1,T2,K,M,LL,Key,Value>

{

public T1 value1;

public T2 value2;

public K value3;

public M value4;

public LL value5;

public Key value6;

public Value value7;

}

interface TestInterface<T>

{

T Value

{

get;

set;

}

}

class Test : TestInterface<int> 这里要指定接口泛型T的类型

{

public int Value { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }

}

泛型方法

1.普通类中的泛型方法

class Test2

{

public void TestFun<T>( T value)

{

Console.WriteLine(value);

}

public void TestFun<T>()

{

//用泛型类型 在里面做一些逻辑处理

T t = default(T); //default(类型);返回改类型默认值。

}

public T TestFun<T>(string v)

{

return default(T);

}

public void TestFun<T,K,M>(T t, K k, M m)

{

}

}

2.泛型类中的泛型方法

class Test2<T>

{

public T value;

public void TestFun<K>(K k)

{

Console.WriteLine(k);

}

// ↓这个不叫泛型方法 因为 T是泛型类申明的时候 就指定 在使用这个函数的时候

//我们不能再去动态的变化了

public void TestFun(T t)

{

}

}

泛型的作用

1.不同类型对象的相同逻辑处理就可以选择泛型

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

举例:优化ArrayList

class ArrayList<T>

{

private T\[\] array;

public void Add(T value)

{

}

public void Remove( T value)

{

}

}


cs 复制代码
using System.Collections;


class Judge
{
   public static string  Type <T> ()
    {
        string a;
        if (typeof(T) == typeof(int))
        {
            return a = "整形" + "," + sizeof(int) + "字节";
        }
        else if (typeof(T) == typeof(Char))
        {
            return a = "字符" + "," + sizeof(Char) + "字节";
        }
        else if (typeof(T) == typeof(float))
        {
            return a = "浮点数" + "," + sizeof(float) + "字节";
        }
        else if (typeof(T) == typeof(String))
        {
            return a = "字符串" + "," + "?"+ "字节";
        }
        else { return a = "其他类型"; }
    }

}


class Program
{
  

    public   static void Main()
    {
       Console.WriteLine ( Judge.Type<int>());
        Console.WriteLine(Judge.Type<float >());
        Console.WriteLine(Judge.Type<double >());
        Console.WriteLine(Judge.Type<string >());
        Console.WriteLine(Judge.Type<Char>());
    }
    
}
相关推荐
小羊没烦恼!1 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
倒头就睡的小比特1 天前
算法竞赛C++常用的STL
c++·算法
俊昭喜喜里1 天前
java中的继承和多态的区别
java
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕1 天前
JSONObject与JSONArray封装数据格式区别
java·json
神仙别闹1 天前
基于C#+MySQL实现(WinForm)个人聊天室软件
c#
胡写代码1 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖1 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时1 天前
01-06-A-JVM排查实战详解
java·jvm
猎头南楼1 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习