C#泛型及其应用:获取并显示员工信信息

目录

一、关于泛型

1.泛型定义

2.泛型与非泛型的区别

3.泛型的应用

(1)泛型类:

(2)泛型方法:

(3)泛型委托:

(4)泛型接口:

(5)泛型约束:

二、实例


一、关于泛型

1.泛型定义

        泛型编程是一种编程方式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。泛型是用于处理算法、数据结构的一种编程方法。泛型的目标是采用广泛适用和可交互性的形式来表示算法和数据结构,以使它们能够直接用于软件构造。泛型类、结构、接口、委托和方法可以根据它们存储和操作的数据类型来进行参数化。

2.泛型与非泛型的区别

        泛型能在编译时提供强大的类型检查,减少数据类型之间的显示转换、装箱操作和运行时的类型检查等。泛型类和泛型方法同时具备可重用性、类型安全和效率高等特性,这是非泛型类和非泛型方法无法具备的。

3.泛型的应用

         泛型类、结构、接口、委托和方法可以根据它们存储和操作的数据类型来进行参数化。泛型通常用在集合和在集合上运行的方法中。

        泛型是C#编程中一种强大的功能,它允许创建可以处理多种类型的数据的通用类、方法和函数。泛型是在C# 2.0中引入的,它提供了一种类型安全的方式,可以在不牺牲性能的情况下重用代码。

        泛型的主要优点是它可以在编译时检查类型安全,避免了运行时类型转换错误。它还可以提高代码的可读性和可重用性。以下是C#中使用泛型的一些示例:

(1)泛型类:

public class MyClass<T>
{
    private T _value;

    public MyClass(T value)
    {
        _value = value;
    }
    
    public T GetValue()
    {
        return _value;
    }
}

(2)泛型方法:

public static T Swap<T>(ref T a, ref T b)
{
    T temp = a;
    a = b;
    b = temp;
}

(3)泛型委托:

public delegate T MyGenericDelegate<T>(T input);

(4)泛型接口:

public interface IMyGenericInterface<T>
{
    void DoSomething(T value);
}

(5)泛型约束:

public class MyClass<T> where T : struct
{
    // ...
}

        在上面的示例中,T是一个类型参数,它可以在创建类、方法或函数时指定。通过使用泛型,我们可以创建可以处理不同类型的数据的通用代码,而不需要为每种类型编写特定的代码。

二、实例

        本实例将使用泛型存储不同类型的数据,在实现时,首先定义一个泛型类,并在泛型类中定义多个泛型变量;然后使用这些变量记录不同类型的数据,这样就可以重复利用泛型变量来存储不同类型的数据。本实例用来通过泛型获取员工信息并显示。

// 通过泛型获取员工信息并显示
namespace _126
{
    public partial class Form1 : Form
    {
        private GroupBox? groupBox1;
        private Button? button1;
        private TextBox? textBox6;
        private TextBox? textBox5;
        private TextBox? textBox4;
        private Label? label6;
        private Label? label5;
        private Label? label4;
        private Label? label1;
        private Label? label2;
        private Label? label3;
        private TextBox? textBox1;
        private TextBox? textBox2;
        private TextBox? textBox3;

        public Form1()
        {
            InitializeComponent();
            StartPosition = FormStartPosition.CenterScreen;
            Load += Form1_Load;
        }

        private void Form1_Load(object? sender, EventArgs e)
        {
            // 
            // label1
            // 
            label1 = new Label
            {
                AutoSize = true,
                Location = new Point(15, 19),
                Name = "label1",
                Size = new Size(44, 17),
                TabIndex = 1,
                Text = "编号:"
            };
            // 
            // label2
            // 
            label2 = new Label
            {
                AutoSize = true,
                Location = new Point(15, 51),
                Name = "label2",
                Size = new Size(44, 17),
                TabIndex = 2,
                Text = "性别:"
            };
            // 
            // label3
            // 
            label3 = new Label
            {
                AutoSize = true,
                Location = new Point(15, 83),
                Name = "label3",
                Size = new Size(44, 17),
                TabIndex = 3,
                Text = "生日:"
            };
            // 
            // textBox1
            // 
            textBox1 = new TextBox
            {
                Location = new Point(64, 13),
                Name = "textBox1",
                Size = new Size(100, 23),
                TabIndex = 4
            };
            // 
            // textBox2
            // 
            textBox2 = new TextBox
            {
                Location = new Point(64, 45),
                Name = "textBox2",
                Size = new Size(100, 23),
                TabIndex = 5
            };
            // 
            // textBox3
            // 
            textBox3 = new TextBox
            {
                Location = new Point(64, 77),
                Name = "textBox3",
                Size = new Size(100, 23),
                TabIndex = 6
            };
            // 
            // label4
            // 
            label4 = new Label
            {
                AutoSize = true,
                Location = new Point(173, 19),
                Name = "label4",
                Size = new Size(44, 17),
                TabIndex = 7,
                Text = "姓名:"
            };
            // 
            // label5
            // 
            label5 = new Label
            {
                AutoSize = true,
                Location = new Point(173, 51),
                Name = "label5",
                Size = new Size(44, 17),
                TabIndex = 8,
                Text = "年龄:"
            };
            // 
            // label6
            // 
            label6 = new Label
            {
                AutoSize = true,
                Location = new Point(173, 83),
                Name = "label6",
                Size = new Size(44, 17),
                TabIndex = 9,
                Text = "工资:"
            };
            // 
            // textBox4
            // 
            textBox4 = new TextBox
            {
                Location = new Point(222, 13),
                Name = "textBox4",
                Size = new Size(100, 23),
                TabIndex = 10
            };
            // 
            // textBox5
            // 
            textBox5 = new TextBox
            {
                Location = new Point(222, 45),
                Name = "textBox5",
                Size = new Size(100, 23),
                TabIndex = 11
            };
            // 
            // textBox6
            // 
            textBox6 = new TextBox
            {
                Location = new Point(222, 77),
                Name = "textBox6",
                Size = new Size(100, 23),
                TabIndex = 12
            };
            // 
            // groupBox1
            // 
            groupBox1 = new GroupBox
            {
                Location = new Point(12, 12),
                Name = "groupBox1",
                Size = new Size(335, 107),
                TabIndex = 0,
                TabStop = false,
                Text = "员工信息"
            };
            groupBox1.Controls.Add(textBox6);
            groupBox1.Controls.Add(textBox5);
            groupBox1.Controls.Add(textBox4);
            groupBox1.Controls.Add(label6);
            groupBox1.Controls.Add(label5);
            groupBox1.Controls.Add(label4);
            groupBox1.Controls.Add(label1);
            groupBox1.Controls.Add(label2);
            groupBox1.Controls.Add(label3);
            groupBox1.Controls.Add(textBox1);
            groupBox1.Controls.Add(textBox2);
            groupBox1.Controls.Add(textBox3);
            groupBox1.SuspendLayout();

            // 
            // button1
            // 
            button1 = new Button
            {
                Location = new Point(272, 125),
                Name = "button1",
                Size = new Size(75, 23),
                TabIndex = 0,
                Text = "获取",
                UseVisualStyleBackColor = true
            };
            button1.Click += Button1_Click;
           
            // 
            // Form1
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(359, 156);
            Controls.Add(button1);
            Controls.Add(groupBox1);
            Name = "Form1";
            Text = "使用泛型存储不同类型的数据列表";
            groupBox1.ResumeLayout(false);
            groupBox1.PerformLayout();


        }
        /// <summary>
        /// 为泛型类中声明的字段进行赋值,存储不同类型的值
        /// 实例化泛型类对象
        /// 将泛型类中各字段的值显示在文本框中
        /// </summary>
        private void Button1_Click(object? sender, EventArgs e)
        {
            Types<object> Extecute = new()
            {
                ID = 1,
                Name = "王老师",
                Sex = "男",
                Age = 25,
                Birthday = Convert.ToDateTime("1986-06-08"),
                Salary = 1500.45F
            };

            textBox1!.Text = Extecute.ID.ToString();
            textBox2!.Text = Extecute.Sex.ToString();
            textBox3!.Text = Extecute.Birthday.ToString();
            textBox4!.Text = Extecute.Name.ToString();
            textBox5!.Text = Extecute.Age.ToString();
            textBox6!.Text = Extecute.Salary.ToString();
        }
        /// <summary>
        /// 声明泛型类
        /// 在泛型类内声明泛型字段
        /// </summary>
        /// <typeparam name="T"></typeparam>
        class Types<T>
        {
            public T? ID;      //声明编号字段 
            public T? Name;    //声明姓名字段 
            public T? Sex;     //声明性别字段 
            public T? Age;     //声明年龄字段 
            public T? Birthday;//声明生日字段 
            public T? Salary;  //声明薪水字段 
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/398139.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧公厕:让智慧城市的公共厕所焕发“智慧活力”

智慧城市的建设已经进入了一个新的阶段&#xff0c;不仅仅是智慧交通、智慧环保&#xff0c;如今甚至连公厕都开始迎来智慧化时代。智慧公厕作为智慧城市的神经末梢&#xff0c;正在通过信息化、数字化和智慧化的方式&#xff0c;实现全方位的精细化管理。本文以智慧公厕源头专…

代码随想录刷题笔记-Day21

1. 二叉搜索树中的插入操作 701. 二叉搜索树中的插入操作https://leetcode.cn/problems/insert-into-a-binary-search-tree/给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。…

我为什么不喜欢关电脑?

程序员为什么不喜欢关电脑&#xff1f; 你是否注意到&#xff0c;程序员们似乎从不关电脑&#xff1f;别以为他们是电脑上瘾&#xff0c;实则是有他们自己的原因&#xff01;让我们一起揭秘背后的原因&#xff0c;看看程序员们真正的“英雄”本色&#xff01; 一、上大学时。 …

Vue3引用第三方模块报错Could not find a declaration file for module ***.

在引用第三方的组件时候报错如下 原因是&#xff1a;该组件可能不是.ts文件而是.js文件 解决方案&#xff1a; 1.在Src的目录下面新建一个文件为shims-vue.d.ts的文件 2.文件内容为 declare module xxx&#xff0c;xxx就是你报错的模块 例如我这样 declare module vue3-pu…

代码随想录day26--贪心基础

什么是贪心 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优 举个例子&#xff1a; 有一堆钞票&#xff0c;可以拿走十张&#xff0c;如果想要达到最大的金额&#xff0c;应该怎么拿&#xff1f; 指定每次拿最大的&#xff0c;最终结果就是拿走最大数额的…

TypeScript(一):TypeScript基本理解

TypeScript基本理解 为什么使用TS JavaScript发展至今&#xff0c;没有进行数据类型的验证而我们知道&#xff0c;在编程阶段&#xff0c;错误发现的越早越好而TS就解决了JS的这个问题 认识TypeScript TypeScript是拥有类型的JavaScript超级&#xff0c;它可以编译成普通、…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之LoadingProgress组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之LoadingProgress组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、LoadingProgress组件 用于显示加载动效的组件。 子组件 无 接口 L…

Docker详解及使用

文章目录 为什么要用docker为什么会出现容器Docker 是什么容器是什么虚拟化是什么Docker 和 虚拟化的区别Docker 容器有几种在状态什么是仓库什么是镜像什么是容器仓库、镜像、容器的关系常用的 Docker 命令如何把主机的东西拷贝到容器内部如何让容器随着 Docker 服务启动而自动…

双缸黑白箭来袭,3月5日亮相,胡斯瓦纳发布全新车系。

根据国外最新消息&#xff0c;Husqvarna准备在下个月就是3月5日发布全新车系&#xff0c;前段时间刚曝光的新款的401&#xff0c;这突然就来了双缸版本的黑白箭了&#xff0c;之前的401/701全部都是单缸&#xff0c;这也是首台胡斯瓦纳黑白箭的双缸车型。 外观方面仍然采用现代…

自学嵌入式困难吗?

自学嵌入式困难吗&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01…

阿里云服务器租用价格,2024年新版活动报价明细表

2024年阿里云服务器租用价格表更新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服…

产品经理学习-产品运营《社群搭建》

什么是社群 有主题&#xff1a;成员有共同的需求&#xff0c;目标或价值观有组织&#xff1a;有文档的群体结构&#xff0c;是有一群人协作而成的有规则&#xff1a;有门槛和规则玩法 社交、社区、社群的区别 社交&#xff1a; 多数的社交是单点对单点的社交以沉淀关系为目的…

代码随想录算法训练营DAY21 | 二叉树 (9)

一、LeetCode 669 修建二叉搜索树 题目链接&#xff1a;669.修建二叉搜索树https://leetcode.cn/problems/trim-a-binary-search-tree/description/ 思路&#xff1a;递归三部曲-定参数、返回值-定终止条件-定单层递归逻辑 class Solution {public TreeNode trimBST(TreeNode …

沁恒CH32V30X学习笔记09---使用TIM 外部时钟1模式实现硬件计数

TIM 外部时钟1使用 定时器时钟 通过框图可知;外部时钟1模式下仅仅只有通道1 和通道2 可以输入脉冲 简单示例教程 void TIM1_ETRClockMode1_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);TIM_CounterModeConfig(TIM1, TIM_CounterMode_Up)

SwiftUI 更自然地向自定义视图传递参数的“另类”方式

概览 在 SwiftUI 中&#xff0c;正是自定义视图让我们的 App 变得与众不同&#xff01;然而&#xff0c;除了传统的视图接口定义方式以外&#xff0c;我们其实还可以有更“银杏化”的选择。 如上图所示&#xff1a;对于 SubView 子视图所需的参数我们一开始并没有操之过急&…

MySQL的备份与恢复案例

新建数据库 数据库备份&#xff0c;数据库为school&#xff0c;素材如下1.创建student和score表CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address…

可视化视频监控平台EasyCVR如何配置服务参数以免getbaseconfig接口信息泄露?

可视化云监控平台/安防视频监控系统EasyCVR视频综合管理平台&#xff0c;采用了开放式的网络结构&#xff0c;平台支持高清视频的接入和传输、分发&#xff0c;可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集…

Codeforces Beta Round 15 C. Industrial Nim Nim,1~n的异或和

Problem - 15C - Codeforces 目录 Nim游戏&#xff1a; 1~n的异或和&#xff1a; 代码&#xff1a; Nim游戏&#xff1a; n个石头堆&#xff0c;谁最后没得取谁败 我用的异或思考法&#xff0c;对所有堆异或。开局异或和为0的败 最后全是0&#xff0c;异或完也是0. //最…

强化学习(没想好叫什么)

on policy&#xff08;同策略学习&#xff09; ①&#xff1a;数据来源&#xff1a;同策略学习方法使用当前正在执行的政策产生的数据来更新该策略。意味着用于训练的数据必须是由当前撤了选择的行为所产生的。 ②实时学习&#xff1a;由于它使用当前策略的数据&#xff0c;因…

如何在Excel中冻结行或列标题?这里提供两种方法

随着数据的增长&#xff0c;许多Excel工作表可能会变得很大&#xff0c;因此冻结行和列标题或冻结窗格非常有用&#xff0c;以便在滚动工作表时将标题锁定到位。在Excel中&#xff0c;可以冻结行标题和列标题&#xff0c;也可以只冻结一个。这不会影响将要打印的单元格。列标题…