首页 > 编程语言 >什么是C#的扩展方法,要怎么自定义使用

什么是C#的扩展方法,要怎么自定义使用

时间:2024-03-16 09:58:08浏览次数:30  
标签:string 自定义 C# 代码 扩展 str 字符串 方法

在这里插入图片描述

介绍:

C#中的扩展方法是一种特殊的静态方法,允许你向现有的类添加新的方法,而无需修改类的原始定义。它们使得可以在不修改原始类的情况下,给类添加新的行为。这种功能在编写库或者框架时非常有用,因为它允许你向已有的类添加新的功能,同时不会破坏现有的代码。

原理:

扩展方法背后的原理是在编译时对方法调用进行处理。当调用一个扩展方法时,编译器会将其解析为对静态方法的调用,而不是目标对象的实例方法。编译器会自动将目标对象作为第一个参数传递给扩展方法。

优点:

  1. 不修改现有类的情况下添加功能: 可以向现有的类添加新的行为,而无需修改原始类的定义。
  2. 提高代码的可读性: 可以将相关的操作封装在一起,使代码更加清晰易读。
  3. 避免重复代码: 可以在多个地方使用相同的扩展方法,避免了代码重复。

缺点:
4. 可能引起命名冲突: 如果多个扩展方法具有相同的名称和参数类型,则会引起命名冲突。
5. 可能造成混乱: 扩展方法可能会让代码变得难以理解,因为它们不是类的实际成员,而是看起来像是类的一部分。

示例代码:

using System;

// 创建一个静态类,包含扩展方法
public static class StringExtensions
{
    // 扩展方法,用于获取字符串的第一个字符
    public static char GetFirstCharacter(this string str)
    {
        if (string.IsNullOrEmpty(str))
            throw new ArgumentException("字符串不能为空");

        return str[0];
    }

    // 扩展方法,用于反转字符串
    public static string Reverse(this string str)
    {
        char[] charArray = str.ToCharArray();
        Array.Reverse(charArray);
        return new string(charArray);
    }
}

class Program
{
    static void Main(string[] args)
    {
        string myString = "Hello, world!";

        // 使用扩展方法获取字符串的第一个字符
        char firstChar = myString.GetFirstCharacter();
        Console.WriteLine($"第一个字符是:{firstChar}");

        // 使用扩展方法反转字符串
        string reversedString = myString.Reverse();
        Console.WriteLine($"反转后的字符串是:{reversedString}");
    }
}

标签:string,自定义,C#,代码,扩展,str,字符串,方法
From: https://blog.csdn.net/zuiyuewentian/article/details/136735184

相关文章

  • 聊聊ChatGLM-6B医疗数据微调
    转载请注明出处:https://www.cnblogs.com/zhiyong-ITNote/参考了多个医疗大模型,如扁鹊、灵心等,重新思考了下微调的方案以及数据集的格式;基于ChatGLM/其它LLM整合多种微调方法的非官方实现的框架,审视其数据集格式,以及调试效果,进行微调。最终基于liucongg/ChatGLM-Finetuning开......
  • Elasticsearch 基础-1
    Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引孳,基于RESTfulweb接口。功能:分布式的搜索引擎和数据分析引擎全文检索(like),结构化检索(a=1),数据分析(count/groupby)对海量数据进行近实时的处理(秒级)特点:可拓展性:大型分布式集群(......
  • RocketMQ - Broker启动的时候都做了什么?
    1.Broker启动的时候是如何初始化自己的核心配置的?启动Broker的时候也是通过mqbroker这种脚本来实现的,最终脚本里一定会启动一个JVM进程,开始执行一个mainclass的代码。实际上Broker的JVM进程启动之后,会执行BrokerStartup的main()方法,这个BrokerStartup类,就在rocketmq源码......
  • C++函数调用优化
    C++函数调用优化施磊老师网课笔记截图1、用临时对象拷贝构造一个新对象的时候,编译器会对其优化,直接用生成临时对象的方法构造新对象;......
  • 实验1 C语言输入输出和简单程序编写
    task1.1#include<stdio.h>intmain(){ printf("O\n"); printf("<H>\n"); printf("II\n"); printf("O\n"); printf("<H>\n"); printf("II\n"); return0;}task1.2#......
  • Canvas 控件
    在C#中中设置控件坐标Labellabel=newLabel{Content="测试",FontSize=14,Foreground=newSolidColorBrush((Color)ColorConverter.ConvertFromString("#FF0000"))};Canvas.SetTop(label,10.9);//在c#后台代码中动态设置Canvas.SetLeft(label,......
  • 实战5-某政府采购网cookies反爬(进入前检查浏览器)
    目标网站aHR0cDovL3d3dy55bmdwLmNvbS8=1.呈现状态2.分析网站先复制请求链接的curl看看打印出的结果打印出的结果不正常,来看看请求头,里面有一个'$Cookie',转场到请求连接的cookies中看看,xincaigou这个值大概就是我们想要的往上看其他请求,找xincaigou从哪冒出来,在第二个链......
  • Educational Codeforces Round 163 (Rated for Div. 2)
    EducationalCodeforcesRound163(RatedforDiv.2)A-SpecialCharacters解题思路:一个相同的连续段会贡献两个特殊字符,所以答案一定是偶数,找个不同的数分隔开即可。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll......
  • .Net Core 你必须知道的source-generators
    源生成器是C#9中引入的一项功能,允许在编译过程中动态生成代码。它们直接与C#编译器集成(Roslyn)并在编译时运行,分析源代码并根据分析结果生成附加代码。源生成器提供了一种简化的自动化代码生成方法,无需外部工具或单独的预编译步骤。通过无缝集成到编译过程中,源生成器可......
  • CF57C Array 题解
    发现单调不降序列反过来就是单调不增序列,只需考虑单调不降序列即可。假如将问题转化为:初始为\(1\),一共有\(n+1\)个位置,有\(n-1\)次增加答案的机会,每个位置可以拥有多次增加答案的机会,问一共有多少种可能性。显然答案为\(C_{2n-1}^{n-1}\)。所以总体答案为\(2C_{2n-1}^{n-......