鉴于以下情况,代码为什么会出现重复项目?类型反射(?)中的重复项目
Type intType = typeof(Int32);
foreach(var v in intType.GetMethods())
Console.WriteLine(v.Name);
例如ToString()
出现4次。
鉴于以下情况,代码为什么会出现重复项目?类型反射(?)中的重复项目
Type intType = typeof(Int32);
foreach(var v in intType.GetMethods())
Console.WriteLine(v.Name);
例如ToString()
出现4次。
这是因为它返回所有t的重载从结构的Int32
可能是它的整个继承树。尝试通过BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly
至GetMethods
。
因为Int32.ToString() has four overloads。您可以轻松地设置一个断点看到这一点,检查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)}
+1他字符串方法:布拉沃!!!!!! – 2013-03-21 14:58:29
因为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)
的原因是,有更多的是的方法,不仅仅是一个名字:
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
我只是upvoted你,因为图像=) – 2013-03-21 15:10:54
谢谢,一张图片胜过千言万语:) – 2013-03-21 15:20:53