C# 入门一一扩展方法

本文详细介绍了C#中的扩展方法,一种为现有类型添加新方法而不改变其原始定义的技术。适用于不想或不能通过继承来修改类型的场景,特别是在处理值类型或密封类时。文章提供了扩展方法的定义规则及调用顺序,展示了如何在不同命名空间下定义和使用扩展方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念:用来扩展已定义类型中的方法成员的一种方法。

用途:如果想为一个已有类型自定义含有特殊逻辑的新方法时,不想通过重新定义一个类型来继承已有类型的方式去添加该方法,另外当已有类型为值类型或密封类(不能被继承的类)等也不能被继承时,我们可以使用扩展方法来解决。

示例:

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

namespace Example_ExtenFunc
{
    using CustomNamespace;
    public class Person
    {
        public string Name
        {
            get;
            set;
        }
    }

    public static class Extensionclass
    {
        //扩展方法定义
        public static void Print( this Person per )
        {
            Console.WriteLine( "调用的是当前命名空间下的扩展方法输出,姓名: {0}", per.Name );
        }
    }

    class Program
    {
        static void Main( string[ ] args )
        {
            Person p = new Person
            {
                Name = "Andy"
            };
            p.Print();
            p.Print( "hello" );
            Console.Read( );
        }
    }
}

namespace CustomNamespace
{
    using Example_ExtenFunc;
    public static class CustomExtensionClass
    {
        //扩展方法定义
        public static void Print( this Person per )
        {
            Console.WriteLine( "调用的是CustomNamespace命名空间下的扩展方法输出,姓名: {0}", per.Name );
        }

        public static void Print( this Person per, string s )
        {
            Console.WriteLine( "调用的是CustomNamespace命名空间下的扩展方法输出,姓名: {0}, 附加字符串{1}", per.Name, s );
        }
    }
}

运行结果:

扩展方法的定义规则:

(1).扩展方法必须在一个非嵌套、非泛型的静态类中定义

(2).它至少要有一个参数

(3).第一个参数必须加上this关键字作为前缀(第一个参数类型也称为扩展类型,即指方法对这个类型进行扩展)

(4).第一个参数不能使用任何其他的修饰符(如ref、out等修饰符)

(5).第一个参数类型不能是指针类型

编译器调用扩展方法的顺序:

类型的实例方法——> 当前命名空间下的扩展方法——>导入命名空间下的扩展方法。

注意:

(1).如果扩展的类型中定义了无参数的Print实例方法,则编译器不能只能提示给出扩展方法。

(2).如果同一个命名空间下的两个类中含有扩展类型相同的方法,编译器将不知道调用哪个方法,出现编译错误。

(3).空引用也可调用扩展方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值