C#反射类中所有字段,属性,方法
2010-10-12 17:00
274 查看
可能大家都知道在C#中如何创建一个类,但对于类的结构可能大家不一定了解的很清楚,对于我来说,我之前也搞的不是很明白,今天,当我没事研究反射的时候突然发现了着一点。
我们来看类的结构到底是什么
1. public class People //类名
2. {
3. private static string name; //字段
4.
5. private string sex;//字段
6.
7. public string Sex //属性
8. {
9. get { return sex; }
10. set { sex = value; }
11. }
12.
13. public static string Name //属性
14. {
15. get { return People.name; }
16. set { People.name = value; }
17. }
18.
19. private People() //构造函数
20. {
21.
22. }
23.
24. public static string GetName() // 函数
25. {
26.
27. if (string.IsNullOrEmpty(name))
28. {
29. name = "my name";
30. }
31. return name;
32.
33.
34. }
35.
36.
37. }
以上所有的构造函数、事件、字段、方法和属性都叫做成员,即Member
运行下列代码:
1. Type t = typeof(People);
2. Console.WriteLine("----------------Method------------------");
3. MethodInfo[] methods = t.GetMethods( );
4. foreach (MethodInfo method in methods)
5. {
6. Console.WriteLine("Method:" + method);
7.
8. //Console.WriteLine(method);
9. //Console.WriteLine("返回值:" + method.ReturnParameter);
10. }
11. Console.WriteLine("---------------Field-------------------");
12. FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance|BindingFlags.Static);
13.
14. foreach (FieldInfo field in fields)
15. {
16. Console.WriteLine("Field:" + field);
17. }
18.
19. Console.WriteLine("--------------Member--------------------");
20. MemberInfo[] members = t.GetMembers();
21.
22. foreach (MemberInfo member in members)
23. {
24. Console.WriteLine("Member:" + member);
25. }
26. Console.WriteLine("--------------Property--------------------");
27. PropertyInfo[] properties = t.GetProperties( );
28.
29. foreach (PropertyInfo property in properties)
30. {
31. Console.WriteLine("Property:" + property);
32. }
33. Console.WriteLine("--------------Constructor--------------------");
34. ConstructorInfo[] constructors = t.GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance);
35.
36. foreach (ConstructorInfo constructor in constructors)
37. {
38. Console.WriteLine("Constructor:" + constructor);
39. }
输出结果为:
1. ----------------Method------------------
2. Method:System.String get_Sex()
3. Method:Void set_Sex(System.String)
4. Method:System.String get_Name()
5. Method:Void set_Name(System.String)
6. Method:System.String GetName()
7. Method:System.String ToString()
8. Method:Boolean Equals(System.Object)
9. Method:Int32 GetHashCode()
10. Method:System.Type GetType()
11. ---------------Field-------------------
12. Field:System.String sex
13. Field:System.String name
14. --------------Member--------------------
15. Member:System.String get_Sex()
16. Member:Void set_Sex(System.String)
17. Member:System.String get_Name()
18. Member:Void set_Name(System.String)
19. Member:System.String GetName()
20. Member:System.String ToString()
21. Member:Boolean Equals(System.Object)
22. Member:Int32 GetHashCode()
23. Member:System.Type GetType()
24. Member:System.String Sex
25. Member:System.String Name
26. --------------Property--------------------
27. Property:System.String Sex
28. Property:System.String Name
29. --------------Constructor--------------------
30. Constructor:Void .ctor()
31. 请按任意键继续. . .
另外,我们发现属性Sex和Name编译以后变成了get_Sex,get_Name,set_Sex,set_Name,呵呵,看来还是更java一样
我们来看类的结构到底是什么
1. public class People //类名
2. {
3. private static string name; //字段
4.
5. private string sex;//字段
6.
7. public string Sex //属性
8. {
9. get { return sex; }
10. set { sex = value; }
11. }
12.
13. public static string Name //属性
14. {
15. get { return People.name; }
16. set { People.name = value; }
17. }
18.
19. private People() //构造函数
20. {
21.
22. }
23.
24. public static string GetName() // 函数
25. {
26.
27. if (string.IsNullOrEmpty(name))
28. {
29. name = "my name";
30. }
31. return name;
32.
33.
34. }
35.
36.
37. }
以上所有的构造函数、事件、字段、方法和属性都叫做成员,即Member
运行下列代码:
1. Type t = typeof(People);
2. Console.WriteLine("----------------Method------------------");
3. MethodInfo[] methods = t.GetMethods( );
4. foreach (MethodInfo method in methods)
5. {
6. Console.WriteLine("Method:" + method);
7.
8. //Console.WriteLine(method);
9. //Console.WriteLine("返回值:" + method.ReturnParameter);
10. }
11. Console.WriteLine("---------------Field-------------------");
12. FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance|BindingFlags.Static);
13.
14. foreach (FieldInfo field in fields)
15. {
16. Console.WriteLine("Field:" + field);
17. }
18.
19. Console.WriteLine("--------------Member--------------------");
20. MemberInfo[] members = t.GetMembers();
21.
22. foreach (MemberInfo member in members)
23. {
24. Console.WriteLine("Member:" + member);
25. }
26. Console.WriteLine("--------------Property--------------------");
27. PropertyInfo[] properties = t.GetProperties( );
28.
29. foreach (PropertyInfo property in properties)
30. {
31. Console.WriteLine("Property:" + property);
32. }
33. Console.WriteLine("--------------Constructor--------------------");
34. ConstructorInfo[] constructors = t.GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance);
35.
36. foreach (ConstructorInfo constructor in constructors)
37. {
38. Console.WriteLine("Constructor:" + constructor);
39. }
输出结果为:
1. ----------------Method------------------
2. Method:System.String get_Sex()
3. Method:Void set_Sex(System.String)
4. Method:System.String get_Name()
5. Method:Void set_Name(System.String)
6. Method:System.String GetName()
7. Method:System.String ToString()
8. Method:Boolean Equals(System.Object)
9. Method:Int32 GetHashCode()
10. Method:System.Type GetType()
11. ---------------Field-------------------
12. Field:System.String sex
13. Field:System.String name
14. --------------Member--------------------
15. Member:System.String get_Sex()
16. Member:Void set_Sex(System.String)
17. Member:System.String get_Name()
18. Member:Void set_Name(System.String)
19. Member:System.String GetName()
20. Member:System.String ToString()
21. Member:Boolean Equals(System.Object)
22. Member:Int32 GetHashCode()
23. Member:System.Type GetType()
24. Member:System.String Sex
25. Member:System.String Name
26. --------------Property--------------------
27. Property:System.String Sex
28. Property:System.String Name
29. --------------Constructor--------------------
30. Constructor:Void .ctor()
31. 请按任意键继续. . .
另外,我们发现属性Sex和Name编译以后变成了get_Sex,get_Name,set_Sex,set_Name,呵呵,看来还是更java一样
相关文章推荐
- C#反射类中所有字段,属性,方法
- C#反射类中所有字段,属性,方法
- C#反射类中所有字段,属性,方法
- C#反射类中所有字段,属性,方法
- 应用程序中的所有线程都可以访问方法中的公用字段。要同步对公用字段的访问,您可以使用属性替代字段,并使用 ReaderWriterLock 对象控制访问。为此,请按照下列步骤操作:
- runtime 系列-2获取类的所有特征(属性,实例变量,方法)
- 包括了UISegmentedControl的所有属性和方法
- python 获得对象的所有属性和方法
- 编写高质量代码改善C#程序的157个建议——建议93:构造方法应初始化主要属性和字段
- javacript对象的所有属性和方法
- cmstop中实例化controller_admin_content类传递$this,其构造方法中接收到的是--名为cmstop的参数--包含cmstop中所有属性
- 获取com对象的所有属性和方法
- c# 字段,属性和方法总结
- js获取对象的所有属性和方法
- IHTMLDocument2的所有成员、属性、方法、事件[转]
- XML枚举一个节点的所有属性的方法
- Win32页上的所有控件属性与方法
- 获得结果集的字段名称,ResultSet的属性要调用ResultSetMetaData的方法
- ios获取未知类所有属性和方法
- 用反射的方式获取父类中的所有属性和方法