1. 程式人生 > >C#高階篇(5)

C#高階篇(5)

1.反射和特性

有關程式以及型別的資料被稱為元資料,特們儲存在程式的程式集中。

程式在執行時,可以檢視其他程式及或其本身的元資料。一個執行的程式檢視本身元資料或者其他程式集的元資料的行為叫做反射。

Type類是抽象類,用來包含型別的特性。

GetFields獲取類中的相關屬性(公有的)

            MyClass class1 = new MyClass();
            Type type = class1.GetType();
            Console.WriteLine(type.Name);//獲取類的名字 ,type之儲存類的成員
            Console.WriteLine(type.Namespace);//獲取所在的名稱空間
            Console.WriteLine(type.Assembly);
            FieldInfo[] array = type.GetFields();
            Console.ReadKey();

通過type物件也可以獲取到類中的屬性和方法

PropertyInfo[] array2 = type.GetProperties();
MethodInfo[] array3 = type.GetMethods();

2.Assembly程式集類

通過類的type物件獲取它所在的程式集

通過Assembly中的GetTypes方法,獲取此程式集中定義的型別

            MyClass my = new MyClass();
            Assembly assem = my.GetType().Assembly;
            Console.WriteLine(assem.FullName);
            Type[] types = assem.GetTypes();
            foreach(var type in types)
            {
                Console.WriteLine(type);
            }
            Console.ReadKey();

3.Obsolete特性

Obsolete特性表示一個方法被棄用了,在Obsolete後面加上引數字串,在呼叫被Obsolete特性標記的方法的時候,就會顯示字串的內容

        [Obsolete("這個方法被棄用了")]
        static void OldMethod()
        {

        }
        static void NewMethod()
        {

        }
        static void Main(string[] args)
        {
            OldMethod();
        }

4.Conditional特性

Conditional放在一個方法前

在Conditional後面加上一個字串

這個特性在使用後,如果沒有定義這個字串在巨集,所有的Conditional特性的方法就會不在呼叫。

5.呼叫者資訊特性

放在一個引數前面,引數會系統自動輸入

static void OldMethod(string str, [CallerFilePath]string fileName = "", [CallerLineNumber]int lineNumber = 0 ,[CallerMemberName]string methodName = "")
        {
            Console.WriteLine(str);
            Console.WriteLine(fileName);
            Console.WriteLine(lineNumber);
            Console.WriteLine(methodName);
        }
        static void Main(string[] args)
        {
            OldMethod("biancheng");
            Console.ReadKey();
        }

6.DebuggerStepThrough特性

單步除錯的時候,跳過用這個特性標記的方法