1. 類的成員
類中的數據和函數都稱為類的成員。類的成員可以分為兩類:
•類本身所聲明的。
•從基類中繼承來的。
如果在類聲明中沒有指定基類,則該類將繼承System.Object類的所有成員。
2. 成員的類別
類的成員有以下幾種類別:
注:C#中的類成
員可以是任意類型,包括數組和集合。
英文中 “字段”是英文單詞“Field”,有時會被翻譯成“域”,和“字段”是同一概念。
3. 類的成員的訪問級別
•public:聲明為公有成員,訪問不受限制。公有成員提供了類的外部界面,允許類的使用者從外部進行訪問。
•protected:聲明為受保護成員,只能訪問包含類或從包含類派生的類。受保護成員對於外界是隱藏的。
•internal:聲明為內部成員,只能訪問當前程序集。
•protected internal:聲明為受保護的內部成員,只能訪問當前程序集或從包含類派生的類。
•private:聲明為私有成員,只有該類中的成員可以訪問。如果在聲明中沒有設置成員的訪問修飾符,成員會被默認為private。
使用代碼示例來說明
public class People //類名 { private static string name; //字段 private string sex;//字段 public string Sex //屬性 { get { return sex; } set { sex = value; } } public static string Name //屬性 { get { return People.name; } set { People.name = value; } } private People(){} //構造函數 public static string GetName() // 函數 { if (string.IsNullOrEmpty(name)) { name = "my name"; } return name; } }
以上所有的構造函數、事件、字段、方法和屬性都叫做成員,即Member
運行下列代碼:
Type t = typeof(People); Console.WriteLine("----------------Method------------------"); MethodInfo[] methods = t.GetMethods( ); foreach (MethodInfo method in methods) { Console.WriteLine("Method:" + method); //Console.WriteLine(method); //Console.WriteLine("返回值:" + method.ReturnParameter); } Console.WriteLine("---------------Field-------------------"); FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance|BindingFlags.Static); foreach (FieldInfo field in fields) { Console.WriteLine("Field:" + field); } Console.WriteLine("--------------Member--------------------"); MemberInfo[] members = t.GetMembers(); foreach (MemberInfo member in members) { Console.WriteLine("Member:" + member); } Console.WriteLine("--------------Property--------------------"); PropertyInfo[] properties = t.GetProperties( ); foreach (PropertyInfo property in properties) { Console.WriteLine("Property:" + property); } Console.WriteLine("--------------Constructor--------------------"); ConstructorInfo[] constructors = t.GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance); foreach (ConstructorInfo constructor in constructors) { Console.WriteLine("Constructor:" + constructor); }
輸出結果為:
----------------Method------------------
Method:System.String get_Sex()
Method:Void set_Sex(System.String)
Method:System.String get_Name()
Method:Void set_Name(System.String)
Method:System.String GetName()
Method:System.String ToString()
Method:Boolean Equals(System.Object)
Method:Int32 GetHashCode()
Method:System.Type GetType()
---------------Field-------------------
Field:System.String sex
Field:System.String name
--------------Member--------------------
Member:System.String get_Sex()
Member:Void set_Sex(System.String)
Member:System.String get_Name()
Member:Void set_Name(System.String)
Member:System.String GetName()
Member:System.String ToString()
Member:Boolean Equals(System.Object)
Member:Int32 GetHashCode()
Member:System.Type GetType()
Member:System.String Sex
Member:System.String Name
--------------Property--------------------
Property:System.String Sex
Property:System.String Name
--------------Constructor--------------------
Constructor:Void .ctor()
請按任意鍵繼續. . .