C#通过泛型方法的重载分别调用主窗体和提示窗体

目录

一、涉及到的知识点

1.泛型方法的重载

2.使用泛型更好地实现通用化

二、示例:泛型方法及其重载

1.源码

2. 生成效果


        实际开发项目时,有时会因为调用窗体或提示窗体过多,而难于管理,这时,可以通过泛型方法的重载将调用窗体与提示窗体分开编写,这样,当在程序中使用调用窗体或提示窗体时,只需调用指定的泛型方法即可。本实例将通过泛型方法的重载实现子窗体的不同操作。

一、涉及到的知识点

1.泛型方法的重载

        泛型方法重载是一种允许在同一类或接口中定义多个具有相同名称但参数类型不同的方法的技术。当调用该方法时,编译器将根据传递给它的参数类型选择适当的方法

// 泛型方法重载示例
class MyClass
{public void MyMethod<T>(T param1){// 方法体1}public void MyMethod<T>(T param1, T param2){// 方法体2}public void MyMethod<T>(T param1, T param2, T param3){// 方法体3}
}

        泛型方法重载与非泛型方法重载类似,除了在方法签名中使用类型参数外。在决定使用哪种方法时,编译器将考虑传递给方法的参数类型。在C#中,泛型方法的类型参数必须在方法签名中声明,并且在方法体中不能更改。 

2.使用泛型更好地实现通用化

        根据上述对泛型方法及其重载的定义,使用泛型是一种编写可以处理多种类型的数据的代码的方法。泛型允许您编写一次代码并用不同类型的参数重用它,而不是为每种类型的数据编写单独的代码。

        以下是使用泛型编写通用代码的一些好处:

  • 代码重用:通过使用泛型,您可以编写一次代码并用不同类型的参数重用它。这减少了您需要编写的代码量,并使您的代码更易于维护。
  • 代码清晰度:使用泛型可以使您的代码更易于阅读和理解。当您使用泛型时,您可以在代码的签名中看到正在使用什么类型的数据,这可以使其他开发人员更容易理解您的代码。
  • 错误减少:使用泛型可以减少运行时错误的机会。当您使用泛型时,编译器可以在编译时帮助您捕获类型错误,而不是在运行时发生错误。
  • 性能:在某些情况下,使用泛型可以提高代码的性能。当您使用泛型时,编译器可以生成针对特定类型的数据优化的代码,这可以提高您的应用程序的性能。

        总的来说,使用泛型编写通用代码可以使您的代码更有效,更易于维护,并且更易于阅读和理解。

二、示例:泛型方法及其重载

         通过泛型方法的重载分别调用主窗体和提示窗体

1.源码

// 通过泛型实现子窗体的不同操作
namespace _129
{public partial class Form1 : Form{private Button? button1;private Button? button2;public Form1(){InitializeComponent();StartPosition = FormStartPosition.CenterScreen;Load += Form1_Load;}private void Form1_Load(object? sender, EventArgs e){// // button1// button1 = new Button{Location = new Point(42, 48),Name = "button1",Size = new Size(100, 23),TabIndex = 0,Text = "调用子窗体",UseVisualStyleBackColor = true};button1.Click += Button1_Click;// // button2// button2 = new Button{Location = new Point(152, 48),Name = "button2",Size = new Size(100, 23),TabIndex = 1,Text = "调用提示窗体",UseVisualStyleBackColor = true};button2.Click += Button2_Click;// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(284, 101);Controls.Add(button2);Controls.Add(button1);Name = "Form1";Text = "通过泛型实现子窗体的不同操作";}private void Button1_Click(object? sender, EventArgs e){FormOperate<object>();//调用FormOperate方法的第一种重载形式对窗体操作}private void Button2_Click(object? sender, EventArgs e){FormOperate<object>("数据库连接失败。");//调用FormOperate方法的第二种重载形式对窗体操作}/// <summary>/// 在Form1中新建泛型方法,/// 并实例化Form2窗体对象/// 以对话框形式显示Form2窗体/// </summary>public static void FormOperate<T>(){Form2 Frm_2 = new();Frm_2.ShowDialog();}/// <summary>/// 重载泛型方法,带参数了/// 实例化提示框中显示图标对象并显示/// </summary>public static void FormOperate<T>(string strError){MessageBoxIcon messIcon = MessageBoxIcon.Error;MessageBox.Show(strError, "提示", MessageBoxButtons.OK, messIcon);}}
}

         子窗体:

//子窗体
namespace _129
{public partial class Form2 : Form{public Form2(){InitializeComponent();StartPosition = FormStartPosition.CenterScreen;Load += Form2_Load;}private void Form2_Load(object? sender, EventArgs e){// // Form2// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(224, 101);Name = "Form2";Text = "子窗体";}}
}

2. 生成效果

 

 

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

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

相关文章

【力扣hot100】刷题笔记Day8

前言 到了大章节【链表】了&#xff0c;争取两三天给它搞定&#xff01;&#xff01; 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09;】 双指针 参考题解&#xff0c;相比于求长度右对齐再一起出发的方法简洁多了 class Solution:def getIntersectionNode(self, head…

基于FPGA的二维DCT变换和逆变换verilog实现,包含testbench

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 数据导入到matlab显示图像 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1ps // // Company: // Engineer:…

win32 汇编读文件

做了2个小程序&#xff0c;没有读成功&#xff1b;文件打开了&#xff1b; .386.model flat, stdcalloption casemap :noneinclude windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib include Comdlg32.inc includelib …

2024-02-21 学习笔记(DETR)

自动多模态检测验证效果不佳&#xff08;过检太多&#xff09;后&#xff0c;节后开始尝试DETR路线。 基本梳理了下DETR发展和验证的脉络&#xff0c;先进行相应指定场景的效果验证。 关于DETR系列的介绍&#xff0c;B站上比较多&#xff0c;迪哥的都讲的比较细。 推荐大佬的…

如何在java中使用 Excel 动态函数生成依赖列表

前言 在Excel 中&#xff0c;依赖列表或级联下拉列表表示两个或多个列表&#xff0c;其中一个列表的项根据另一个列表而变化。依赖列表通常用于Excel的业务报告&#xff0c;例如学术记分卡中的【班级-学生】列表、区域销售报告中的【区域-国家/地区】列表、人口仪表板中的【年…

[计网底层小探索]:实现并部署多线程并发Tcp服务器框架(基于生产者消费者模型的线程池结构)

文章目录 一.网络层与传输层协议sockaddr结构体继承体系(Linux体系)贯穿计算机系统的网络通信架构图示: 二.实现并部署多线程并发Tcp服务器框架线程池模块序列化反序列化工具模块通信信道建立模块服务器主体模块任务回调模块(根据具体应用场景可重构)Tips:DebugC代码过程中遇到…

el-table同时固定左列和右列时,出现错误情况

最近遇到一个问题,就是需求是要求表格同时固定序号列和操作列,我们用的是饿了么组件库的el-table,如下图,出现了错误情况: 解决方法就是使用doLayout方法: 如果使用了keep-alive,可以在activated里执行doLayout方法: activated() {this.$nextTick(() => {this.$ref…

【Crypto | CTF】BUUCTF RSA2

天命&#xff1a;密码学越来越难了&#xff0c;看别人笔记都不知道写啥 天命&#xff1a;莫慌&#xff0c;虽然我不会推演法&#xff0c;但我可以用归纳法 虽然我不知道解题的推演&#xff0c;但我可以背公式啊哈哈哈 虽然我不会这题&#xff0c;但是我也能做出来 公式我不知…

机器学习基本概念(李宏毅课程)

目录 一、概念:1、机器学习概念:2、深度学习概念&#xff1a; 二、深度学习中f(.)的输入和输出&#xff1a;1、输入&#xff1a;2、输出&#xff1a; 三、三种机器学习任务&#xff1a;1、Regression回归任务介绍&#xff1a;2、Classification分类任务介绍&#xff1a;3、Stru…

计算以10为底的对数 math.log10(x)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算以10为底的对数 math.log10(x) [太阳]选择题 以下代码的输出结果中正确的是? import math print("【执行】math.log10(10)") print(math.log10(10)) print("【执行】math…

【elasticsearch实战】知识库文件系统检索工具FSCrawler

需求背景 最近有一个需求需要建设一个知识库文档检索系统&#xff0c;这些知识库物料附件的文档居多&#xff0c;有较多文档格式如&#xff1a;PDF, Open Office, MS Office等&#xff0c;需要将这些格式的文件转化成文本格式&#xff0c;写入elasticsearch 的全文检索索引&am…

进度条小程序

文章目录 铺垫回车换行缓冲区概述强制冲刷缓冲区 简单实现倒计时功能进度条小程序版本一实例代码效果展示分析 版本二 铺垫 回车换行 回车和换行是两个独立的动作 回车是将光标移动到当前行的最开始&#xff08;最左侧&#xff09; 换行是竖直向下平移一行 在C语言中&…

怿星科技测试实验室(EPT LABS)服务介绍

据中国汽车工业协会数据&#xff0c;2023年我国汽车产销量分别达3016.1万辆和3009.4万辆&#xff0c;年产销量双双创历史新高&#xff0c;汽车行业进入了新时代。新汽车时代下的OEM竞争更激烈&#xff0c;汽车电子架构更复杂&#xff0c;研发周期更短&#xff0c;软件迭代更快&…

VSCODE中使用Django处理后端data和data models

链接&#xff1a; Python and Django tutorial in Visual Studio Code MVC的理解 在实际的程序中采用MVC的方式进行任务拆分。 Model&#xff08;模型&#xff09;负责封装应用程序的数据和业务逻辑部分。Model包含数据结构&#xff0c;数据处理逻辑以及相关的操作方法&#…

NetSuite 中Inventory Adjustment批次物料CSV导入分析二

上一篇最后我们有一个遗留问题是说&#xff0c;调增和调减的操作是否能在一个CSV导入模版中进行操作&#xff0c;经过测试后发现&#xff0c;是可以的&#xff0c;只是External ID需要在设置的时候注意对应好就OK。这里建议大家先查看上一篇文章&#xff0c;因为有一些完全重复…

Day14-Linux系统基础权限知识精讲

Day14-Linux系统基础权限知识精讲 1. chattr2. Linux系统权限。2.1 基础权限介绍2.2 画图讲解2.3 文件和目录权限细节总结2.4 建环境测试2.5 数字权限设置2.6 字符权限设置 给文件加特殊属性&#xff0c;实现特殊功能的命令。 1. chattr a 只能追加内容&#xff0c;不能删除。…

UE蓝图 入口(FunctionEntry)节点和源码

系列文章目录 UE蓝图 Get节点和源码 UE蓝图 Set节点和源码 UE蓝图 Cast节点和源码 UE蓝图 分支(Branch)节点和源码 UE蓝图 入口(FunctionEntry)节点和源码 文章目录 系列文章目录一、FunctionEntry节点功能二、入口节点用法1. 创建函数2. 命名函数3. 定义参数4. 编写函数逻辑5…

Git合并固定分支的某一部分至当前分支

在 Git 中&#xff0c;通常使用 git merge 命令来将一个分支的更改合并到另一个分支。如果你只想合并某个分支的一部分代码&#xff0c;可以使用以下两种方法&#xff1a; 1.批量文件合并 1.1.创建并切换到一个新的临时分支 首先&#xff0c;从要合并的源分支&#xff08;即要…

C++面向对象程序设计-北京大学-郭炜【课程笔记(四)】

C面向对象程序设计-北京大学-郭炜【课程笔记&#xff08;四&#xff09;】 1、this指针1.1、this指针的作用1.2、this指针和静态成员函数 2、静态成员变量和静态成员函数2.1、基本概念2.2、基本概念总结2.3、如何访问静态成员2.4、静态成员变量的使用场景&#xff08;重要&…

浏览器---浏览器/http相关面试题

1.localStorage和sessionStorage 共同点&#xff1a;二者都是以key-value的键值对方式存储在浏览器端&#xff0c;大小大概在5M。 区别&#xff1a; &#xff08;1&#xff09;数据有效期不同&#xff1a;sessionStorage仅在当前浏览器窗口关闭之前有效&#xff1b;localStorag…