【Bug】拓展方法必须在非泛型静态类中定义

本文详细介绍了C#中的扩展方法,包括其定义、作用和使用方式。扩展方法允许向现有类型添加新功能,而无需继承或修改原始类型。它们本质上是静态方法,但在调用时可像实例方法一样使用。扩展方法的使用步骤包括定义扩展方法和在代码中引入相应命名空间。示例中展示了如何定义和使用一个计算字符串长度的扩展方法。
摘要由CSDN通过智能技术生成

Bug

原:
在这里插入图片描述
修改:
在这里插入图片描述

拓展方法

1.定义:

(1)扩展方法能使你能够向现有类型添加“添加”方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型。

(2)扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样调用。

注:

(1)扩展方法的第一个参数指定该方法作用于那个类型,并且此参数用this为前缀修饰。仅当你使用using指令将命名空间显示导入到源码之中后,扩展方法才位于范围中。

(2)在代码中,可以使用实例方法语法调用改扩展方法,但是,编译器生成的中间语言(IL)会将代码转换为对静态方法的调用。因此,并未真正 违反封装原则,实际上,扩展方法无法访问到他们所扩展类型中的私有变量。

(3)不能重写扩展方法

(4)与接口或者类具有相同名称和签名的扩展方法永远不会被调用(编译时优先级:实例方法 > 扩展方法)
(5)所处的类必须是static修饰,因为拓展方法是静态的

(方法签名:c#中指返回值和参数)
2. 简单代码示例:

步骤一:定义扩展方法,namespace为PipelineExtensions

namespace PipelineExtensions
{
    public static class StringExtensions
    {
        // 扩展方法---计算字符串长度
        public static int WordCount(this string str)
        {
            return str.Length;
        }
    }
}

步骤二:使用此扩展方法

(1)先通过using把namespace引入到使用文件中

(2)使用扩展方法 WordCount(this string str)中的第一个参数类型string为类型的参数调用此扩展方法

using PipelineExtensions;
using System;
namespace Pipeline
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string ex = "yx123456";
            int count = ex.WordCount();
            Console.WriteLine(count);
            Console.ReadKey();
        }
    }
}

或者当成普通静态方法调用

StringExtensions.WordCount("yx123456");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软泡芙

给爷鞠躬!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值