3

在 C# 中,当我将一个 int 值括在括号中并键入点时,我会得到一个可以对该 int 值执行的函数列表

string a = (12).ToString();

我的问题是,我们如何定义这样的自定义函数?例如,我想定义一个可以像这样工作的函数 toDateTime

DateTime dt = ("12/12/12").toDateTime();

我完全理解这也可以通过正常方式完成

DateTime dt = toDateTime("12/12/12");

我只是好奇它是如何通过另一种方式完成的。

4

4 回答 4

6

您可以创建扩展方法

也许是这样的:

public static class MyExtensions
{
     public static DateTime ToDateTime(this String str)
     {
         // return something
     }
}   
于 2013-03-05T08:42:31.667 回答
6

您所描述的是扩展方法

这些是 IDE (Visual Studio) 使它们看起来像是扩展类型的一部分的静态类和方法。

请注意,无需将类型括在括号中:

string a = 12.ToString(); // not an extension method - it is defined on Object
于 2013-03-05T08:42:57.313 回答
4

你不能:这些基本类型的函数,以及ToString在 Object 中定义的函数,都是由框架提供的。但是,您可以通过使用扩展方法来获得(或多或少)相同的结果。

扩展方法是静态类中的静态函数,IDE (VS) 和编译器将其视为由第一个参数(标记为this)定义的类的成员函数。它们实际上与添加成员函数不同:它们的分辨率和优先级不同。

于 2013-03-05T08:42:57.500 回答
2

您可以使用扩展方法

public static DateTime ToDateTime(this string datestring)
{
    return DateTime.Parse(datestring);
}

扩展方法可以打包在一个static class

例子 :

static class Program
{
    public static DateTime ToDateTime(this string datestring)
    {
        return DateTime.Parse(datestring);
    }
    static void Main(string[] args)
    {
        DateTime date = "12/12/12".ToDateTime();

    }
}
于 2013-03-05T08:43:53.413 回答