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;  //声明薪水字段 }}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五种多目标优化算法(MOGWO、MOJS、NSWOA、MOPSO、MOAHA)性能对比(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MOGWO 1.2MOJS 1.3NSWOA 1.4MOPSO 1.5MOAHA 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数&#xff08;zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3&#xff09;&#xff0…

leetcode1049:最后一块石头的重量二

解题思路&#xff1a; 把石头堆分割成差不多的两堆&#xff0c;使得两堆差值最小 dp数组的含义&#xff1a; dp[j]:背包容量为j的背包最大重量(价值)为dp[j] dp[j] max(dp[j],dp[j-stones[i]] stones[i]) 初始化&#xff1a;&#xff08;dp数组的大小根据题目进行定义&a…

网络安全--网鼎杯2018漏洞复现(二次注入)

一、环境&#xff1a;在线测试平台 BUUCTF在线评测 (buuoj.cn) 二、进入界面先尝试万能账号 1or11# 换格式 hais1bux1 11or11# 三、万能的不行那我们就得想注册了&#xff0c;去register.php去看看 注册个账号 发现用户名回显&#xff0c;猜测考点为用户名处二次注入&…

Java 那些诗一般的 数据类型 (1)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

【JavaScript 语法】

JavaScript 语法 ■ JavaScript 是什么■ JavaScript 语法■ JS 注释■ JS 结束符■ JS 输入输出语句■ JS 代码块■ JS 关键词■ JS 值■ JS 字面量 &#xff08;混合值&#xff09;■ JS 变量&#xff08;变量值&#xff09;■ JS 文本值 (字符串)■ JS 字符串可以是对象 ■ …

JS文本加密方法探究

在前端开发中&#xff0c;有时候我们需要对敏感文本进行简单的加密&#xff0c;以提高安全性。本文将介绍一种基于 JavaScript 实现的文本加密方法&#xff0c;使用了 Base64、Unicode 和 ROT13 编码。 示例代码 function encodeText(text) {// Base64编码var base64Encoded …

MongoDB 权限管理

文章目录 前言1. 权限控制1.1 MongoDB 默认角色1.1.1 读写角色1.1.2 管理角色1.1.3 其他角色1.1.4 超级用户角色 1.2 用户管理1.2.1 查看用户1.2.2 创建新用户1.2.3 调整角色1.2.4 删除用户1.2.4 修改密码 前言 上一篇 《MongoDB 单机安装部署》 文章中&#xff0c;为 MongoDB…

STL常用之vector,list,stack,queue,deque总结与对比

一&#xff0c;vector 1&#xff09;底层 vector的底层是开辟出来的一块连续空间&#xff0c;类似于数组&#xff0c;每次空间满了之后会根据不同的编译器有不同的扩容倍数。 2&#xff09;优劣 优点&#xff1a;随机访问效率高&#xff0c;因为地址是连续的&#xff0c;底层…

Linux 驱动开发基础知识——APP 怎么读取按键值(十二)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

前端简单知识复习

1.symbol类型 Symbol 是 ECMAScript 6 中引入的一种新的基本数据类型&#xff0c;它表示独一无二的值。Symbol 值是通过 Symbol() 函数创建的。 Symbol 值具有以下特点&#xff1a; 独一无二性&#xff08;唯一性&#xff09;&#xff1a;每个通过 Symbol() 函数创建的 Symb…

基于RBAC的权限管理的理论实现和权限管理的实现

权限管理的理论 首先需要两个页面支持&#xff0c;分别是角色管理和员工管理&#xff0c;其中角色管理对应的是角色和权限的配合&#xff0c;员工管理则是将登录的员工账号和员工所处的角色进行对应&#xff0c;即通过新增角色这个概念&#xff0c;让权限和员工并不直接关联&a…

Error creating bean with name ‘formContentFilter‘ defined in class path

问题描述 运行之前能正常的项目出现以上报错&#xff0c;提示创建“formContentFilter”时错误&#xff1b;org.springframework.boot版本2.4.8 org.springframework.beans.factory.BeanCreationException. Message: Error creating bean with name formContentFilter define…

202428读书笔记|《风吹哪页读哪页》——答案在路上,自由在风里,身处井隅,心向璀璨

202428读书笔记|《风吹哪页读哪页》——答案在路上&#xff0c;自由在风里&#xff0c;身处井隅&#xff0c;心向璀璨 文前篇章一 三餐四季篇章二 山水一程篇章三 心之安处篇章四 通关时刻篇章五 瞬间长大 《风吹哪页读哪页》飞扬文室编著&#xff0c;有很多非常经典又惊艳的句…

4款AI写作软件推荐,让文章撰写更加轻松! #学习方法#知识分享

国外ChatGPT爆火&#xff0c;AI写作在国内也引起不小的瞩目&#xff0c;目前国内的AI写作工具少说也有几十上百个&#xff0c;要在这么多AI写作中找出适合自己的工具&#xff0c;一个一个尝试是不太现实的&#xff0c;所以今天就给大家推荐一些款AI写作工具。帮助你少走弯路&am…

【洛谷题解】P1051 [NOIP2005 提高组] 谁拿了最多奖学金

题目链接&#xff1a;[NOIP2005 提高组] 谁拿了最多奖学金 - 洛谷 题目难度&#xff1a;普及- 涉及知识点&#xff1a;判断条件&#xff0c;累加 题意&#xff1a; 分析&#xff1a;直接统计&#xff0c;判断条件&#xff0c;输出即可&#xff08;水&#xff09; AC代码&am…

Stable Diffusion 绘画入门教程(webui)

文章目录 一、前言二、做出的效果三、SD使用流程1、大模型2、关键字3、调参数 一、前言 随着mj和sd绘画软件发布之后&#xff0c;AI绘画开始爆火&#xff0c;很多小伙伴已经挖掘出很多的玩法&#xff0c;哪怕最基础的AI美女、AI壁纸、真人漫改等等都赚的盆满钵满&#xff0c;当…

【Flink】FlinkSQL读取hive数据(批量)

一、简介: Hive在整个数仓中扮演了非常重要的一环,我们可以使用FlinkSQL实现对hive数据的读取,方便后续的操作,本次例子为Flink1.13.6版本 二、依赖jar包准备: 官网地址如下: Overview | Apache Flink 1、我们需要准备相关的jar包到Flink安装目录的lib目录下,我们需…

NC文件不规则裁剪(利用shp文件裁剪)(三)

文章目录 前言实例数据代码部分需要的库加载文件写入地理信息裁剪NC结果 完整代码奉上 前言 Hello大家好呀&#xff0c;最近正好需要用到多个SHP去裁剪NC&#xff0c;按照我以前的两种办法&#xff08;办法1和办法2&#xff09;操作的话&#xff0c;我自己都会破防&#xff0c…

Halcon中打开摄像机

&#xff08;带货广告&#xff1a;需要该套测试设备或者工业相机的及其相关产品的&#xff0c;请私聊我&#xff09; 1、相机说明 使用Basler相机&#xff0c; 2、打开Halcon助手 3、检测相机 4、连接摄像机和采集画面 5、自动生成代码 生成代码后&#xff0c;保存工程到本…

FreeRtos任务调度

一.创建任务函数 xTaskCreate( (TaskFunction_t )start_task, /*要执行的函数&#xff0c;开始任务*/(const char* )"start_task", /*任务名字&#xff0c;建议个函数名一样*/(uint16_t )START_STK_SIZE, (void* …