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. 生成效果

 

 

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

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

相关文章

关于 REST API,你了解多少?

什么是 REST API REST 是 REpresentational State Transfer 的缩写&#xff0c;是分布式超媒体系统的架构风格。Roy Fielding 于 2000 年在他的著名论文中首次提出了这一点。从那时起&#xff0c;它已成为构建基于 Web 的 API&#xff08;应用程序编程接口&#xff09;的最广泛…

保障工作效率!实时监管员工工作微信

随着移动办公的普及&#xff0c;员工使用微信进行工作沟通已成为常态。为了实时监管员工工作微信&#xff0c;企业可以通过个微管理系统来提高效率并确保合规&#xff1a; 给员工分配微信子账号 企业管理者可以直接在系统上给员工分配子账号&#xff0c;并轻松查看子账号的工…

leetcode hot100 买卖股票的最佳时机二

注意&#xff0c;本题是针对股票可以进行多次交易&#xff0c;但是下次买入的时候必须保证上次买入的已经卖出才可以。 动态规划可以解决整个股票买卖系列问题。 dp数组含义&#xff1a; dp[i][0]表示第i天不持有股票的最大现金 dp[i][1]表示第i天持有股票的最大现金 递归公…

ElasticSearch之bool多条件查询

写在前面 在实际的业务场景中&#xff0c;不可能只是简单的单值查询 &#xff0c;更多的是n个条件的综合查询&#xff0c;就像下面的搜索&#xff1a; 针对这种场景我们就需要依赖于bool查询了&#xff0c;本文就一起来看下这部分的内容。 1&#xff1a;bool查询介绍 bool查…

在github的README.md中插入视频;在github的README.md中添加gif演示动画

最近需要再github中上传项目的源代码&#xff0c;应导师的要求&#xff0c;需要再README中加入对实验视频的展示&#xff0c;但是github的README.md其实就是一个markdown文件&#xff0c;据我的理解这个文件里应该无法直接插入视频吧&#xff1f;&#xff08;如果后续有办法直接…

python中的类与对象(2)

目录 一. 类的基本语法 二. 类属性的应用场景 三. 类与类之间的依赖关系 &#xff08;1&#xff09;依赖关系 &#xff08;2&#xff09;关联关系 &#xff08;3&#xff09;组合关系 四. 类的继承 一. 类的基本语法 先看一段最简单的代码&#xff1a; class Dog():d_…

Python Web开发记录 Day3:BootStrap

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 三、BootStrap1、BootStrap-初体验2、BootStrap…

Inno setup 打包jar包+前端dist+mysql+navicat等应用文件操作

目录 一、 使用exe4j将后端jar包打包成exe应用文件 1.创建一个新的工程 2.选择一个你想要存放的路径 3.进入配置界面 4.选择jar转换exe模式 5.自定义名字和选择输出路径 6.配置初始化 7.配置java环境 8.测试运行结果 二、Inno 打包应用文件exe 1.新建一个工程文件 2…

前端取图片相同颜色作为遮罩或者背景

需求 遮罩层取图片相同/相似的颜色作为遮罩 效果 做法 npm库 grade.js 所提供图像中前 2 个主色生成的互补渐变https://github.com/benhowdle89/grade COLOR THIEF 只需使用Javascript即可从图像中获取调色板。 https://github.com/lokesh/color-thief https://lokeshd…

向导式堆栈管理器Dockge

经过申诉&#xff0c;目前博客的几个域名都恢复了&#xff0c;时间也延长到了 2033 年&#xff0c;后面还会不会出问题&#xff0c;老苏就不知道了 什么是 Dockge ? Dockge 是一款时髦的、易于使用的、响应式的、自托管的 docker-compose.yaml 向导式堆栈管理器&#xff0c;可…

python使用winio控制x86工控机的gpio

视频讲解 https://www.bilibili.com/video/BV1Nu4m1w7iv/?vd_source5ba34935b7845cd15c65ef62c64ba82f pywinio库 https://pypi.org/project/pywinio/ 安装库 pip install pywinio寄存器地址 测试代码 import pywinio winio get_winio() # 设置排针2输出1,0x40是bit6置…

SSMBUG之 url +

1. Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured. 经查, 书写一切正常. 注意到此时yml文件的图标是一个红色的Y而不是绿色的spring , 推测没有正确加载. 重新创建项目, 所有东西拷贝一份便恢复正常…

04|MySQL事务及ACID

1 事务 事务是一组操作要么全部成功&#xff0c;要么全部失败&#xff0c;目的是为了保证数据最终的一致性。 2 事务的ACID属性 2.1 原子性(Atomicity) 当前事务的操作要么同时成功&#xff0c;要么同时失败。原子性由 undo log日志来实现。 2.2 一致性(Consistent) 使用…

爬虫入门四(抽屉半自动点赞、xpath使用、动作链、打码平台、scrapy框架介绍与安装及创建项目)

文章目录 一、抽屉半自动点赞二、xpath的使用三、动作链四、打码平台介绍超级鹰打码基本测试 五、自动登录超级鹰六、scrapy框架介绍安装创建爬虫项目 一、抽屉半自动点赞 登录抽屉账号保存cookiesimport timeimport jsonfrom selenium import webdriverfrom selenium.webdrive…

javascript给对象添加迭代器

迭代器是啥就自行百度了 为啥for…of可以遍历数组&#xff0c;为啥不能遍历对象&#xff0c;就是for…of会调用迭代器&#xff0c;而数组是内置了迭代器了&#xff0c;而对象没有内置&#xff0c;所以直接使用for…of遍历对象会报错&#xff0c;因此只用在对象的原型上面自定义…

复旦EMBA徐能:攻克新能源+关键技术,十年如一日拓荒前行

乘着“双碳”战略的东风&#xff0c;我国新能源产业迎来了重大发展机遇。在低碳绿色发展日渐成为全球共识的背景下&#xff0c;新能源产业正在发生什么变化&#xff0c;未来的发展将呈现什么格局&#xff1f;本期《同学同行》让我们一起走进复旦大学EMBA 2022级2班同学徐能和他…

Linux服务器节点性能问题排查和优化思路

Linux服务器节点性能问题排查和优化思路 1. atop安装2. 整体思路2.1 如果现场存在/能复现2.2 如果现场不能复现&#xff1a; 3. 高负载问题排查与应对3.1. hung task 问题3.2. 底层硬盘/文件系统无法写入3.3. IO性能不足导致的运行缓慢3.4. CPU 性能不足导致的运行缓慢&#xf…

今天面了个字节拿 38K 出来的测试,让我见识到了基础的天花板

最近内卷严重&#xff0c;各种跳槽裁员&#xff0c;相信很多小伙伴也在准备金九银十的面试计划。 作为一个入职5年的老人家&#xff0c;目前工资比较乐观&#xff0c;但是我还是会选择跳槽&#xff0c;因为感觉在一个舒适圈待久了&#xff0c;人过得太过安逸&#xff0c;晋升涨…

wcf 简单实践 数据绑定 数据更新ui

1.概要 2.代码 2.1 xaml <Window x:Class"WpfApp3.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expr…

SpringIOC之support模块StaticMessageSource

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…