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

できません:プリミティブ型のこれらの関数、およびToStringObjectで定義されているのような関数は、フレームワークによって提供されます。ただし、代わりに拡張メソッドを使用することで、(多かれ少なかれ)同じ結果を得ることができます。

拡張メソッドは、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 に答える