C# ToInt32()是C中的扩展方法吗?专门转换.ToInt32()

C# ToInt32()是C中的扩展方法吗?专门转换.ToInt32(),c#,c#-4.0,extension-methods,C#,C# 4.0,Extension Methods,ToInt32是C中的扩展方法吗?特别是将.ToInt32转换为您可以在ToInt32上按F12键,您可以看到 namespace System { public static class Convert { public static int ToInt32(object value); } } 所以不是一个扩展,而是静态的 C中的扩展如下所示 public static int MethodName(this String str) { ..

ToInt32是C中的扩展方法吗?特别是将.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不是扩展方法,它是静态类Convert中的静态方法

但是,您可以创建一个扩展方法,如下所示:

public static class MyExtensions
{
    public static Int32 ToInt32(this object obj)
    {
        return Convert.ToInt32(obj);
    }
}
public static class StringConverters
{
    public static Int32 ToInt32(String number)
    {
        return Int32.Parse(
            number, 
            NumberStyles.Integer,           
            CultureInfo.CurrentCulture.NumberFormat);
    }
}
var n = StringConverters.ToInt32("12345");
var n = "12345".ToInt32();
用法:

object obj = 5;

int five = obj.ToInt32();

不可以。扩展方法的存在理由是允许实例方法调用语法用于在类型之外声明的方法。您会发现,任何Convert.ToInt32方法都无法做到这一点

例如,类型字符串没有ToInt32String成员方法。如果要将字符串转换为Int32,可以编写如下静态方法:

public static class MyExtensions
{
    public static Int32 ToInt32(this object obj)
    {
        return Convert.ToInt32(obj);
    }
}
public static class StringConverters
{
    public static Int32 ToInt32(String number)
    {
        return Int32.Parse(
            number, 
            NumberStyles.Integer,           
            CultureInfo.CurrentCulture.NumberFormat);
    }
}
var n = StringConverters.ToInt32("12345");
var n = "12345".ToInt32();
这样称呼它:

public static class MyExtensions
{
    public static Int32 ToInt32(this object obj)
    {
        return Convert.ToInt32(obj);
    }
}
public static class StringConverters
{
    public static Int32 ToInt32(String number)
    {
        return Int32.Parse(
            number, 
            NumberStyles.Integer,           
            CultureInfo.CurrentCulture.NumberFormat);
    }
}
var n = StringConverters.ToInt32("12345");
var n = "12345".ToInt32();
或者,在某些情况下,这是可以接受的

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);
    }
}
这样称呼它:

public static class MyExtensions
{
    public static Int32 ToInt32(this object obj)
    {
        return Convert.ToInt32(obj);
    }
}
public static class StringConverters
{
    public static Int32 ToInt32(String number)
    {
        return Int32.Parse(
            number, 
            NumberStyles.Integer,           
            CultureInfo.CurrentCulture.NumberFormat);
    }
}
var n = StringConverters.ToInt32("12345");
var n = "12345".ToInt32();

字符串类型仍然没有ToInt32String成员。看起来ToInt32声明扩展了该类型。这就是为什么它被称为扩展方法。

当您在internet上搜索Convert.ToInt32时,您发现的文档是否不足?当您搜索什么是扩展方法时,是否有不清楚的地方?这个问题没有得到很好的研究,也不是我们在这个网站上所期望的工作水平。就@AnthonyPegram而言,尽管Convert类没有将其任何成员记录为扩展方法,但这说明了问题,因为如果一个方法是扩展方法,作者肯定希望您知道,“否则他们就不会把这个方法作为一个扩展方法了。”AnthonyPegram在网上搜索后,我把这个问题放到了这个网站上,因为这里的成员有不同程度的knowledge@Pavan当前位置下面似乎有几个好答案。这里的惯例是接受使用勾号的选项,在适当的情况下向上投票,或者如果您有进一步的问题,在每个选项下添加注释。你现在会这么做吗?