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>());
    }
    
}
相关推荐
Lilixy.1823几秒前
【Java-反射】
java·开发语言
立志成为coding大牛的菜鸟.1 小时前
力扣139-单词拆分(Java详细题解)
java·算法·leetcode
星夜孤帆2 小时前
LeetCode之数组/字符串
java·算法·leetcode
present12272 小时前
利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注
算法·matlab·数据分析·学习方法
雾岛LYC听风3 小时前
3. 轴指令(omron 机器自动化控制器)——>MC_HomeWithParameter&MC_Move
运维·c#·自动化
GISer小浪花努力上岸4 小时前
Java实现简易计算器功能(idea)
java·开发语言·intellij-idea
脚步的影子4 小时前
Redis 入门 - C#|.NET Core客户端库六种选择
redis·c#·.netcore
Achanss4 小时前
C#学习笔记 .NET Core使用注意事项
笔记·学习·c#
海海向前冲4 小时前
设计模式 -- 单例设计模式
java·开发语言·设计模式
就这样很好8805 小时前
排序算法总结
java·算法·排序算法