如何在c#中创建用户定义的函数,如(int).function()?

时间:2013-03-05 08:40:09

标签: c#

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

string a = (12).ToString();

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

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

我完全明白这可以通过常规方式完成

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

我只是好奇它是如何通过其他方式完成的。

4 个答案:

答案 0 :(得分:6)

您可以创建Extension Method

也许是这样的:

public static class MyExtensions
{
     public static DateTime ToDateTime(this String str)
     {
         // return something
     }
}   

答案 1 :(得分:6)

您所描述的是extension methods

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

请注意,不需要将该类型括在括号中:

string a = 12.ToString(); // not an extension method - it is defined on Object

答案 2 :(得分:4)

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

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

答案 3 :(得分: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();

    }
}