【C#】扩展方法的注意要点

本文探讨了C#中扩展方法与类型内实例方法的优先级问题。当一个类型同时拥有同名的实例方法和扩展方法时,编译器总是会选择实例方法。示例展示了在`GoodStudent`类中如何调用`GoHome`方法,即使存在同名的静态扩展方法。这表明在调用过程中,必须明确使用`this`关键字来调用扩展方法。

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

编译时,扩展方法的优先级总是比类型本身中定义的实例方法低。

如果某个类型具有一个名为 GoHome() 的方法,又有一个名为GoHome的扩展方法,则编译器总是绑定到该实例方法。

public class Student
{
    public void Run()
    {
        Console.WriteLine("run");

        this.GoHome();      //内部调用拓展方法需要使用this关键字,否则会报错
    }
}

public class GoodStudent : Student
{
    // public void GoHome()
    // {
    //     Console.WriteLine("g go home");
    // }

    public void Run()
    {
        this.GoHome();
    }

}

public static class StudentRegister
{
    public static void GoHome(this Student student)
    {
        Console.WriteLine("go home");
    }
}

class Program
{
    static void Main()
    {
        // Student stu = new Student();
        // stu.Run();
        //
        // stu.GoHome();

        GoodStudent gstu = new GoodStudent();
        //gstu.GoHome();
        gstu.Run();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值