ToInt32() 是 C# 中的扩展方法吗?特别是 Convert.ToInt32()

is ToInt32() an extension method in C#? specially Convert.ToInt32()

ToInt32() 是 C# 中的扩展方法吗?特别是 Convert.ToInt32()

在ToInt32()上按F12可以看到

namespace System
{
    public static class Convert
    {
        public static int ToInt32(object value);
    }
}

所以不是扩展而是静态的

C# 中的扩展如下所示

public static int MethodName(this String str)
{
    ...
}

Convert.ToInt32()不是扩展方法,是static里面的静态方法class Convert.

但是,您可以创建一个扩展方法来执行此操作:

public static class MyExtensions
{
    public static Int32 ToInt32(this object obj)
    {
        return Convert.ToInt32(obj);
    }
}

用法:

object obj = 5;

int five = obj.ToInt32();

没有。扩展方法存在的理由是允许实例方法调用语法用于在类型外部声明的方法。您会发现您无法使用任何 Convert.ToInt32 方法来做到这一点。

例如,类型 String 没有 ToInt32(String) 成员方法。如果你想将 String 转换为 Int32,你可以像这样编写一个静态方法:

public static class StringConverters
{
    public static Int32 ToInt32(String number)
    {
        return Int32.Parse(
            number, 
            NumberStyles.Integer,           
            CultureInfo.CurrentCulture.NumberFormat);
    }
}

并这样称呼它:

var n = StringConverters.ToInt32("12345");

或者,(在某些情况下这是可以接受的)

using static StringConverters; 
…
var n = ToInt32("12345");

但是,如果您想使用实例方法调用语法进行调用,您可以在非泛型、非嵌套、静态 class:

public static class StringConverters 
{
    public static Int32 ToInt32(this String number)
    {
        return Int32.Parse(
            number, 
            NumberStyles.Integer,           
            CultureInfo.CurrentCulture.NumberFormat);
    }
}

并这样称呼它:

var n = "12345".ToInt32();

String 类型仍然没有 ToInt32(String) 成员。 ToInt32 声明似乎扩展了该类型。这就是为什么它被称为扩展方法。