可能大家都知道在C#中如何创建一个类,但对于类的结构可能大家不一定了解的很清楚,对于我来说,我之前也搞的不是很明白,今天,当我没事研究反射的时候突然发现了着一点。

我们来看类的结构到底是什么
 
  1. public class People        //类名 
  2.     private static string name;    //字段 
  3.  
  4.     private string sex;//字段 
  5.  
  6.     public string Sex     //属性 
  7.     { 
  8.         get { return sex; } 
  9.         set { sex = value; } 
  10.     } 
  11.  
  12.     public static string Name    //属性 
  13.     { 
  14.         get { return People.name; } 
  15.         set { People.name = value; } 
  16.     } 
  17.  
  18.     private People() //构造函数 
  19.     { 
  20.  
  21.     } 
  22.  
  23.     public static string GetName()    // 函数 
  24.     { 
  25.  
  26.         if (string.IsNullOrEmpty(name)) 
  27.         { 
  28.             name = "my name"
  29.         } 
  30.         return name; 
  31.  
  32.  
  33.     } 
  34.  
  35.  
以上所有的构造函数、事件、字段、方法和属性都叫做成员,即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一样