首页 > 编程语言 >C#中的泛型(未完成)

C#中的泛型(未完成)

时间:2024-01-16 11:13:52浏览次数:23  
标签:C# 类型 int 完成 泛型 StackPointer public CSharpProject1

C#中的泛型

泛型提供了一种更优雅的方式,可以让多个类型共享这一组代码,泛型允许声明类型参数化,用不同的类型进行实例化,在创建类的实例时指明真实的类型。

在C#中,提供了5种泛型:类、结构、接口、委托、方法,前面4种是类型,方法是成员

泛型类

如何声明一个泛型类:

  • 在某些类型上使用占位符声明一个类。
  • 为占位符提供真实数据类型,这样就有了真实类的定义。
  • 创造构造类型的实例。

声明泛型类

  • 在类名之后放置一组尖括号。
  • 在尖括号中用逗号分隔的占位符字符串表示需要提供的类型,这叫做类型参数。
  • 在泛型类声明的主体中使用类型参数来表示代替类型。

例如:

namespace CSharpProject1;

class MyStack<T>
{
    private T[] StackArray;
    private int StackPointer = 0;
    private int StackMaxLength = 10;

    public void Push(T x)
    {
        if (!IsStackFull()) StackArray[StackPointer++] = x;
    }

    public T Pop()
    {
        if (!IsStackEmpty()) return StackArray[--StackPointer];
    }

    public bool IsStackFull()
    {
        return (StackMaxLength == StackPointer) ? true : false;
    }

    public bool IsStackEmpty()
    {
        return (StackPointer == 0) ? true : false;
    }
}

class Program
{
    static void Main(string[] args)
    {
        MyStack<int> stack = new MyStack<int>();
    }
}

泛型委托

泛型委托和非泛型委托非常相似,不过类型参数决定了能接收什么样的方法。

  • 要声明泛型委托,在委托名称之后、委托参数列表之前的尖括号中放置类型参数列表。

    delegate R MyDelegate<T, R>(T value);
    

例如:

namespace CSharpProject1;

delegate T Func<T1, T2, T>(T1 t1, T2 t2);

class Simple
{
    static public string PrintString(int t1, int t2)
    {
        int total = t1 + t2;
        return total.ToString();
    }
}

class Program
{
    static void Main(string[] args)
    {
        var MyDeleGate = new Func<int, int, string> (Simple.PrintString);
        string res = MyDeleGate.Invoke(15, 13);
        Console.WriteLine($"{res}");
    }
}
D:/RiderProjects/CSharpProject1/CSharpProject1/bin/Debug/net8.0/CSharpProject1.exe
28

Process finished with exit code 0.

协变和逆变

在创建泛型类型的实例,编译器会接收泛型类型声明以及类型实参来创建构造类型。

协变

逆变

不变

标签:C#,类型,int,完成,泛型,StackPointer,public,CSharpProject1
From: https://www.cnblogs.com/lilyflower/p/17967184

相关文章

  • 解决 Idea HttpClient 无法读取 http-client.env.json 配置的问题
    前言byd就我遇到了这种情况是吧,百度搜的全是nm复制粘贴的垃圾文章步骤创建一个.http文件,使用idea工具栏创建一个env.json,内容无所谓按理说现在应该就能正常使用了,但是如果到这一步还没法读取到这个环境的话,继续向下看右键env.json看看有没有这个,如果没......
  • pycharm的几个版本
    PyCharm创建新项目的方法http://www.xz7.com/yp/pycharm/  pycharm这款软件被非常多的小伙伴使用,大家在使用该软件的时候,都觉得这款软件操作起来非常的好用,是一款非常实用的选项,这款软件在目前看来,是一款十分受到大家欢迎的软件,针对专业人士来讲,该软件可以帮助他们更......
  • Encountered fatal error while reloading routing: Routing trace file does not mat
      efinity编译在routersetup时候报错Encounteredfatalerrorwhilereloadingrouting:Routingtracefiledoesnotmatchnetlist(netlistnetcount24888v.tracenetcount0).  解决方案:检查客户工程的PNR页面。beneficialskew页面是否打开,如果是on状态,试......
  • 《webpack篇》webpack
    webpackwebpack的产生随着前端的发展,javascript引入了很多思想和技术,例如:模块化、TypeScript、Scss、Less等,这让我们开发更快,但是,这些新的文件格式只有转换成javascript、css等,游览器才能识别,人工转换太过繁琐,所以webpack应运而生。webpack是什么参考链接:https://www.cnblogs.......
  • node-xlsx将excel转Table
    constxlsx=require('node-xlsx')constfs=require('fs');constexcelFilePath='./menu.xlsx'constsheets=xlsx.parse(excelFilePath);constsheet=sheets[0];s='<table>'sheet.data.forEach((row,index......
  • 跨境电商CRM系统七大功能解析——如何解决业务痛点?
    跨境电商企业日常工作中需要用到很多应用例如建独立站、邮件营销、财务管理,其中CRM系统更是客户管理的核心。无论是获客、管理客户资料、维护客户关系、数据分析都要在应用上完成。今天我们就来说一说跨境电商CRM系统有哪些功能?1.AI人工智能助手、2.销售自动化、3.数据安全性、4......
  • FastAPI学习-29 log_config 设置 logger 日志格式
    前言FastAPI服务是通过uvicorn来提供的,日志都是uvicorn里配置的。官方文档地址:https://www.uvicorn.org/settings/#logginguvicorn的logging日志我们可以通过uvicorn.run()方式启动服务uvicorn.run("example:app",port=5000,reload=True,access_log=False)于......
  • 金融CRM系统的五个应用场景与对应功能——如何解决管理难题
    今年市场经济下行,投资趋向于保守、人们消费降级,对于金融行业来说影响很大。受经济形式的影响加上行业的数字化转型升级,金融企业都在寻求客户管理的新策略,维护好忠实客户、吸引新客户投资。小编认为CRM系统是管理客户的不二之选,金融行业CRM是什么?金融crm主要功能与作用 。金融C......
  • CDN静态资源加速&Lighthouse性能监测
    本文主要介绍了cdn加速在项目中的实现,以及使用Lighthouse对前端性能指标进行监测打分。Lighthouse简介Lighthouse是谷歌开发并开源的web性能测试工具,用于改进网络应用的质量,可以将其作为一个Chrome扩展程序运行,或从命令行运行。只需要为其提供一个需要审查的地址,Lighthouse就会......
  • CRM系统如何为制造业解决业务痛点?CRM功能解析
      目前,促进制造业数字化转型是时代的发展方向。为了实现这一趋势,CRM管理系统在制造业中的运用至关重要。那样,制造业CRM应该如何选择呢?高度关注这种业务艰难和解决方案:全方位客户管理、灵便订制作用、高效客户服务以及智能数据分析。1、全方位客户管理业务痛点:订单价值大,......