2

次のコードを考えると、重複したアイテムを取得するのはなぜですか?

Type intType = typeof(Int32);
foreach(var v in intType.GetMethods())
Console.WriteLine(v.Name);

たとえば、ToString()4 回表示されます。

4

5 に答える 5

4

Int32.ToString() には 4 つのオーバーロードがあるためです。intType.GetMethods()これは、ブレークポイントを設定して結果を調べることで簡単に確認できます。

[5] {System.String ToString()}
[6] {System.String ToString(System.String)}
[7] {System.String ToString(System.IFormatProvider)}
[8] {System.String ToString(System.String, System.IFormatProvider)} 
于 2013-03-21T14:57:58.153 に答える
2

この型のすべてのオーバーロードメソッドをType.GetMethods()返すためです。

Int32.ToString()メソッドには 4 つのオーバーロードがあるため、...

System.String ToString()
System.String ToString(System.String)
System.String ToString(System.IFormatProvider)
System.String ToString(System.String, System.IFormatProvider)
于 2013-03-21T14:58:12.770 に答える
2

その理由は、メソッドには名前だけでなく、次のようなものがあるからです

Type intType = typeof(Int32);

foreach(var v in intType.GetMethods())
    Console.WriteLine(v.Name + " " +
                     (v.IsStatic? "static " : "") +
                      string.Join(", ", v.GetParameters()
                                         .Select(p => p.ParameterType.Name + " " + p.Name)));

印刷します

CompareTo Object value
CompareTo Int32 value
Equals Object obj
Equals Int32 obj
GetHashCode 
ToString 
ToString String format
ToString IFormatProvider provider
ToString String format, IFormatProvider provider
Parse static String s
Parse static String s, NumberStyles style
Parse static String s, IFormatProvider provider
Parse static String s, NumberStyles style, IFormatProvider provider
TryParse static String s, Int32& result
TryParse static String s, NumberStyles style, IFormatProvider provider, Int32& result
GetTypeCode 
GetType 
于 2013-03-21T14:59:37.463 に答える
1

これは、Struct Int32 から String メソッドのすべてのオーバーロードを返すためです。

ここに画像の説明を入力

于 2013-03-21T15:06:51.037 に答える
1

おそらく継承ツリー全体です。に渡しBindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnlyてみてくださいGetMethods

于 2013-03-21T14:56:42.527 に答える