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>());
    }
    
}
相关推荐
今天的砖头有点烫手啊6 分钟前
Spring Boot
java·人工智能
坚持编程的菜鸟9 小时前
模拟实现memmove
c语言·算法·模拟实现memmove
码农颜10 小时前
5.4.1 锁分类
java·数据库·mysql
wabs66611 小时前
关于图论【最短路径之Dijkstra算法(堆优化版)|卡码网47.参加科学大会的思考】
数据结构·算法·图论·优先级队列·邻接表·小顶堆·卡码网
坚持编程的菜鸟11 小时前
编写判断大小端程序
c语言·算法·判断大小端
papaofdoudou11 小时前
判断排列逆序奇偶性的乘积判别法(范德蒙德符号法)
人工智能·算法
linux-hzh11 小时前
百日算法修炼 · Day 03
java·算法
yanaiding12 小时前
C# WPF 独立开发看图工具 PixSight 经验介绍(二)—— 水印模块开发实录
图像处理·c#·wpf·个人开发
问商十三载12 小时前
RAG 检索效果差怎么排查?2026 五层诊断法完整指南
开发语言·人工智能·windows·python·算法
不负岁月无痕12 小时前
简单理解操作系统结构
java·linux·c语言·开发语言·c++·面试