0

0

C#学习日记30---泛型类、泛型方法、泛型委托

黄舟

黄舟

发布时间:2017-01-21 15:46:35

|

1437人浏览过

|

来源于php中文网

原创

泛型允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,在声明类或方法的时候由于不知道用户要传入什么样类型的参数,所以在传入类型的地方“挖一个坑(“<T>”)",使用它的时候我们再用具体数据类型填上。

泛型类:

  根据前面所学知识我们定义一个类:

 

 class Data
          {
              public int  n_data;
           }

  此时n_data的数据类型已经确定为int类型,所以为他赋值的时候只能为int 类型,如果改写为下面的泛型类:

  

 class Data
             {
               public T n_data;
             }

此时n_data的数据类型还不确定是什么类型,所以为他赋值的时候需要指定T也就是n_data的类型,也就是填坑,

 

 Data data = new Data();    //指定T为int
  Data data = new Data();  //指定T为string

当然了,上面的例子中是不能够指定T为数组的,如果要让n_data的类型为数组的话,下面的例子可以满足:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Example  
{  
    class Data //泛型类  
    {  
        public T[] n_data; //泛型变量  
       public Data(int size) //构造方法,new的时候调用构造方法开辟空间  
        {   
          n_data = new T[size];    
        }  
        //输入  
       public void setdata(int index,T value)  
       {  
           n_data[index] = value;  
       }  
        //输出  
       public T getdata(int x)  
       {   
          return n_data[x];  
       }  
    }  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            Data data = new Data(5);  
            data.n_data[2] = 2;  
           Console.WriteLine(data.n_data[2]);  
        }  
    }  
}

结果为:2

泛型方法:

   这个我们以swap交换方法为例,在C++中swap函数是这么写的:

ClipDrop Relight
ClipDrop Relight

ClipDrop推出的AI图片图像打光工具

下载
#include   
  
using namespace std;  
template   
void swap1(T &a,T &b) //也可以看作泛型  
{  
  T temp;  
  temp = a;  
  a = b;  
  b = temp;  
}  
int main()  
{  
    int a=0,b=1;  
    swap1(a,b);  
    cout<

结果: 1  0
如果a与b是字符类型以上函数也适用。C#swap方法如下:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Example  
{  
    class data  
    {//swap方法,ref是按地址传递  
        public static void swap(ref T a, ref T b)  
        {  
            T temp;  
            temp = a;  
            a = b;  
            b = temp;  
        }  
        static void Main(string[] args)  
        {  
            string a = "HC";  
            string b = "666";  
            swap(ref a,ref b);  
            Console.WriteLine(a+"\t"+b); //结果 666    HC  
        }  
    }  
}

结果:666      HC      这与C++的倒是很相似啊

 

泛型委托:

  委托也有泛型的,接着上面的例子: 

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Example  
{  
    public delegate void MyDelegate();//泛型委托  
    class Data  
    {  
        private T a;  
        private T b;  
        public void setvalue(T x, T y)  
        {  
            a = x;  
            b = y;  
        }  
        //swap方法,ref是按地址传递  
        public void swap()  
        {  
            T temp;  
            temp = a;  
            a = b;  
            b = temp;  
        }  
        public void printvalue()  
        {  
            Console.WriteLine(a + "\t" + b);  
  
        }  
  }  
      class program  
       {   
         static void Main(string[] args)  
          {  
            Data data = new Data();  
            data.setvalue("HC","666");  
            MyDelegate my = new MyDelegate(data.swap);  
            my += data.printvalue;  
            my();  //结果 666  HC        
           }  
          
       }  
        
   }


结果:

665.png

       关于泛型就介绍这么多了,又什么错误的地方欢迎指出^_^

以上就是 C#学习日记30---泛型类、泛型方法、泛型委托的内容,更多相关内容请关注PHP中文网(www.php.cn)!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

76

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

73

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

67

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

19

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go语言教程-全程干货无废话
Go语言教程-全程干货无废话

共100课时 | 10万人学习

如何进行WebSocket调试
如何进行WebSocket调试

共1课时 | 0.1万人学习

JavaScript基础精讲视频教程
JavaScript基础精讲视频教程

共36课时 | 8.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号