c#4.0-ToInt32()是c#中的一个扩展方法吗?特别是转换.ToInt32()

本文关键字:方法 扩展 转换 ToInt32 一个 特别是 0-ToInt32 c#4 | 更新日期: 2023-09-27 17:58:26

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

c#4.0-ToInt32()是c#中的一个扩展方法吗?特别是转换.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");

但是,如果您想使用实例方法调用语法进行调用,您可以在非泛型、非嵌套的静态类中创建一个扩展方法作为静态方法,并使用第一个参数this

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声明似乎扩展了该类型。这就是为什么它被称为扩展方法。

Convert.ToInt32()不是一个扩展方法,它是静态类Convert中的一个静态方法。

然而,您可以创建一个扩展方法来实现这一点,如下所示:

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

用法:

object obj = 5;
int five = obj.ToInt32();

您可以在ToInt32()上按F12,然后可以看到

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

所以不是扩展而是静态

类似于下面的C#中的扩展

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