C# 拓展方法(涉及Linq)

拓展方法

  • 定义一个扩展方法
  • 使用扩展方法
    • 例如
    • 再举个例子
    • 终极例子
  • 注意事项
  • 与Linq


C#中,扩展方法是一种特殊的静态方法,允许开发者向现有类型“添加”新的方法,而无需修改该类型的源代码或创建新的派生类型。这种机制提供了一种更为灵活的方式来扩展已有的类或结构的功能。

C# 中的扩展方法是一种特殊的静态方法,它允许你为现有类型添加新的方法,而不需要修改原始类型。扩展方法通常用于为那些你无法修改的类型添加功能,比如 .NET Framework 中的类型。


扩展方法的定义必须在一个静态类中,并且方法的第一个参数必须使用 this 关键字,这个
参数指定了扩展方法所作用的类型


定义一个扩展方法

要定义一个扩展方法,需要遵循以下规则:

扩展方法必须在静态类中定义。
扩展方法的第一个参数要使用 this 关键字,并且这个参数指定了方法将扩展哪个类型。
第一个参数之后的参数是扩展方法所需要的其他参数。
下面是一个简单的扩展方法的例子,这个方法为 int 类型添加了一个名为 Square 的方法,用于计算整数的平方:

public static class IntegerExtensions
{
    // 这是一个扩展方法,它扩展了 int 类型
    public static int Square(this int num)
    {
        return num * num;
    }
}

使用扩展方法

一旦定义了扩展方法,就可以像使用实例方法一样来使用它。

例如

using System;

namespace ExtensionMethods
{
    class Program
    {
        static void Main(string[] args)
        {
            int number = 5;
            int square = number.Square(); // 调用扩展方法
            Console.WriteLine($"The square of {number} is {square}");
        }
    }

    public static class IntegerExtensions
    {
        public static int Square(this int num)
        {
            return num * num;
        }
    }
}

在这个例子中,我们不需要修改 int 类型的定义,就可以直接调用 Square 方法。


再举个例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace forCode {
    class Program {
        static void Main(string[] args) {

            double a = 2;
            int b = a.Square();
            Console.WriteLine($"b = {b}");
            Console.ReadKey();
        }
    }
    public static class aa {
        public static int Square(this double num) {
            return Convert.ToInt32(Math.Pow(num, 2.0));
        }
    }

}

上述例子是double的拓展,一个double变量平方后转为int


终极例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace forCode {
    class Program {
        static void Main(string[] args) {

            MyNumber m = new MyNumber();
            m.a = 1;
            m.AddSome(3);
            Console.WriteLine($"m.a = {m.a}");
            Console.ReadKey();
        }
    }

    public class MyNumber {
        public int a;
    } 

    public static class MyExTention {
        public static int Square(this double num) {
            return Convert.ToInt32(Math.Pow(num, 2.0));
        }
        public static void AddSome(this MyNumber myNumber, int num) {
            myNumber.a += num;
        }
    }

}

为自定义的类添加扩展方法

注意事项

扩展方法不能访问它们所扩展的类型中的私有成员。
如果扩展方法与现有方法冲突,那么扩展方法将不会被调用。
扩展方法是一种语法糖,编译器会将它们转换为静态方法的调用。
通过使用扩展方法,开发者可以更加方便地对现有类型进行功能增强,同时保持代码的整洁和可维护性。

与Linq

Where就是一种扩展方法
在这里插入图片描述

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

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

相关文章

结构化开发方法(数据流图)

一、系统设计基本原理 二、系统总体结构设计 三、数据流图 数据流图

出口加工园区gis三维可视化系统全面整合了企业线上线下资源与服务

园区作为产业协同和经济推动的关键节点,承载着企业生产、物流和服务等多种功能,数字孪生三维可视化技术的出现,通过数字孪生和3D可视化的方式,对园区情况和运营实现实时监测和管理,提高了运营效率和协同性。 园区数字孪…

STM32 学习——1. STM32最小系统

这是一个最小系统的测试,LED灯会进行闪烁。选用PC13口,因为STM32F103C8T6 硬件开发板中,这个端口是一个LED 1. proteus8.15 原理图 2. cubemx 新建工程 3. keil 代码 while (1){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);HAL_Delay(100);…

Css 提高 - 获取DOM元素

目录 1、根据选择器来获取DOM元素 2.、根据选择器来获取DOM元素伪数组 3、根据id获取一个元素 4、通过标签类型名获取所有该标签的元素 5、通过类名获取元素 目标:能查找/获取DOM对象 1、根据选择器来获取DOM元素 语法: document.querySelector(css选择…

一套MES系统源码,技术架构springboot + vue-element-plus-admin

一、系统概述 MES全称Manufacturing Execution System,即制造执行系统,它是一套面向生产车间的管理系统。MES系统可用于实现制造业自动化和数字化转型,它可以帮助车间管理人员监控、跟踪、记录和控制从原材料到成品的产品制造流程&#xff0…

掌握Python基本语法的终极指南【基本语法部分】

一、基本语法部分 1.简单数据类型 1.1字符串类型及操作 字符串访问: 1.索引访问 mystr"Hello world" #索引访问 print(mystr[0]) #H print(mystr[-1]) #d print(mystr[-7]) #o print(mystr[6]) #w 2.切片访问 [头下标:尾下标] &#x…

基于Java、SpringBoot和uniapp在线考试系统安卓APP和微信小程序

摘要 基于Java、SpringBoot和uniapp的在线考试系统安卓APP微信小程序是一种结合了现代Web开发技术和移动应用技术的解决方案,旨在为教育机构提供一个方便、高效和灵活的在线考试平台。该系统采用Java语言进行后端开发,使用SpringBoot框架简化企业级应用…

储能服务系统架构:实现能源可持续利用的科技之路

随着可再生能源的快速发展和能源系统的智能化需求增加,储能技术作为能源转型和可持续发展的关键支撑之一,备受各界关注。储能服务系统架构的设计和实现将对能源行业产生深远影响。本文将探讨储能服务系统架构的重要性和关键组成部分,旨在为相…

【C++高阶(一)】继承

目录 一、继承的概念 1.继承的基本概念 2.继承的定义和语法 3.继承基类成员访问方式的变化 ​编辑 4.总结 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 1.派生类中的默认构造函数 2.派生类中的拷贝构造函数 3.派生类中的移动构造函数…

二维轮廓自动添加屋顶

1、背景介绍 在提取建筑物轮廓点后,对轮廓点进行简化得到建筑物轮廓线。将轮廓线进行拉伸,变可得到建筑物白膜,如下图所示。这种形状比较简单,所重建模型实质上就是一个个立方体盒子,缺少屋顶细节,视觉观感…

玩转盲盒潮流:从0到1搭建小程序平台

在当前的消费市场中,盲盒已成为一种炙手可热的消费模式,凭借其神秘性和随机性,迅速俘获了年轻消费者的心。作为一位有志于创新并紧跟市场趋势的创业者,你可能会想:如何从0到1搭建一个属于自己的盲盒小程序平台&#xf…

SpringBoot高级原理详解

文章目录 1 SpringBoot自动化配置原理01-SpringBoot2高级-starter依赖管理机制02-SpringBoot2高级-自动化配置初体验03-SpringBoot2高级-底层原理-Configuration配置注解04-SpringBoot2高级-底层原理-Import注解使用105-SpringBoot2高级-底层原理-Import注解使用206-SpringBoot…

linux---线程控制

线程和进程 以前我们要同时跑多个程序,可以通过fork()多个子进程,然后通过系统函数进行程序的替换,但是创建进程代价大,不仅要拷贝一份父进程的地址空间,页表,文件表述符表等。但是线程不需要因为是进程的…

frp搭建内网流量转发

前提条件 有一台外网服务器 背景介绍 外网服务器linux内网客户端Windows 10下载frp软件安装包 下载地址:https://github.com/fatedier/frp/releases 服务端软件包下载 客户端软件包下载 服务端部署 解压软件包 tar xzvf frp_0.58.0_linux_amd64.tar.gz修复加压后文件夹名…

TemperMonkey在百度搜索页面,提供跳转其他平台搜索、与批量打开搜索结果的功能的脚本代码

代码 // UserScript // name 百度搜索。链接其他搜索。跳转功能。 // namespace http://tampermonkey.net/ // version 0.1(2020-6-24 17:37:27) // description try to take over the world! // author gwd // match https://www.baidu.com/s?…

深度学习中的优化算法一(Pytorch 18)

一 优化和深度学习 优化算法 使我们能够 继续更新模型参数, 并使损失函数的值最小化。这就像在训练集上评估一样。事实上,任何满足于将优化视为黑盒装置,以在简 单的设置中最小化目标函数的人,都可能会知道存在着一系列此类“咒…

Vivado报错集合

Synth 8-5535 报错代码 [Synth 8-5535] port <clk_0> has illegal connections. It is illegal to have a port connected to an input buffer and other components. The following are the port connections : Input Buffer:Port I of instance clkin1_ibufg(IBUF) i…

监控服务器性能指标,提升服务器性能

服务器是网络中最关键的组件之一&#xff0c;混合网络架构中的每个关键活动都以某种方式与服务器操作相关&#xff0c;服务器不仅是现代计算操作的支柱&#xff0c;也是网络通信的关键。 从发送电子邮件到访问数据库和托管应用程序&#xff0c;服务器的可靠性和性能直接影响到…

打开服务器远程桌面连接不上,可能的原因及相应的解决策略

在解决远程桌面连接不上服务器的问题时&#xff0c;我们首先需要从专业的角度对可能的原因进行深入分析&#xff0c;并据此提出针对性的解决方案。以下是一些可能的原因及相应的解决策略&#xff1a; 一、网络连接问题 远程桌面连接需要稳定的网络支持&#xff0c;如果网络连接…

【车载开发系列】Autosar中的VFB

【车载开发系列】Autosar中的VFB # 【车载开发系列】Autosar中的VFB 【车载开发系列】Autosar中的VFB一. 什么是VFB二. VFB的优点与缺点1&#xff09;VFB的缺点2&#xff09;VFB的好处 三. RTE与VFB之间关系四. 总线架构模式 一. 什么是VFB Virtual Functional Bus。它就是虚拟…