ToInt32()
是C#中的扩展方法吗?特别Convert.ToInt32()
答案 0 :(得分:4)
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();
答案 1 :(得分:3)
没有。扩展方法的存在理由是允许实例方法调用语法用于在类型外声明的方法。您会发现使用任何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
声明已扩展该类型。这就是为什么它被称为扩展方法。
答案 2 :(得分:1)
你可以在ToInt32()上按F12,你可以看到
namespace System
{
public static class Convert
{
public static int ToInt32(object value);
}
}
所以不是扩展而是静态
C#中的扩展名如下所示
public static int MethodName(this String str)
{
...
}