熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#反射方法學習總結

2013-11-12 23:38:30  來源: .NET編程 

  摘要本文介紹今天把C#反射方法的東西整理了一下供大家使用我保證我這裡是最全面的東西當然也是基礎的東西

  在網上查找了不少的資料可以說大同小異概念性的東西網上一搜一堆今天把C#反射方法的東西整理了一下供大家使用我保證我這裡是最全面的東西當然也是基礎的東西在學好了這一切的基礎上大家可以學習C#反射方法的具體插件等應用老鳥就不用看了首先我們建立一個類庫將它生成為HelloWorlddll

  usingSystem;
    namespaceWebtest
    …{
    publicinterfaceinterface
    …{
    intadd()
    }
    publicclassReflectTest:interface
    …{
    publicStringWrite;
    privateStringWritec;
    publicStringWritea
    …{
    get
    …{
    returnWrite;
    }
    set
    …{
    Write=value;
    }
    }
    privateStringWriteb
    …{
    get
    …{
    returnWritec;
    }
    set
    …{
    Writec=value;
    }
    }
    publicReflectTest()
    …{
    thisWrite=Write;
    thisWritec=Writec;
    }
    publicReflectTest(stringstrstringstr
    …{
    thisWrite=str;
    thisWritec=str;
    }
    publicstringWriteString(stringsintb)
    …{
    return歡迎您+s++b;;
    }
    publicstaticstringWriteName(strings)
    …{
    return歡迎您光臨+s;
    }
    publicstringWriteNoPara()
    …{
    return您使用的是無參數方法;
    }
    privatestringWritePrivate()
    …{
    return私有類型的方法;
    }
    publicintadd()
    …{
    return;
    }
    }
    }

  然後建立再建立一個項目引入該HelloWorlddll

    usingSystem;
    usingSystemThreading;
    usingSystemReflection;
    classTest
    …{
    delegatestringTestDelegate(stringvalueintvalue
    staticvoidMain()
    …{
    //AssemblyAssemblyt=AssemblyLoadFrom(HelloWorlddll與下面相同的效果
    AssemblyAssemblyt=AssemblyLoad(HelloWorld
    foreach(TypeaaaintGetTypes())
    …{
    //ConsoleWrite(aaaName)//顯示該dll下所有的類
    }
    Module[]modules=tGetModules()
    foreach(Modulemoduleinmodules)
    …{
    //ConsoleWriteLine(modulename:+moduleName)//顯示模塊的名字本例為HelloWorlddll
    }
    Typea=typeof(WebtestReflectTest)//得到具體的類的類型和下面一個效果
    //Typea=tGetType(WebtestReflectTest//
    //ConsoleWrite(aName)
    string[]bb=…{aaaabbbbb};
    objectobj=ActivatorCreateInstance(abb)//創建該類的實例後面的bb為有參構造函數的參數
    //objectobj=tCreateInstance(WebtestReflectTest//與上面方法相同
    MethodInfo[]miArr=aGetMethods()
    foreach(MethodInfomiinmiArr)
    …{
    //ConsoleWrite(miName)//顯示所有的共有方法
    }
    MethodInfomi=aGetMethod(WriteString//顯示具體的方法
    object[]aa=…{使用的是帶有參數的非靜態方法};
    strings=(string)miInvoke(objaa)//帶參數方法的調用
    MethodInfomi=aGetMethod(WriteName
    String[]aa=…{使用的是靜態方法};
    strings=(string)miInvoke(nullaa//靜態方法的調用
    MethodInfomi=aGetMethod(WriteNoPara
    strings=(string)miInvoke(objnull)//不帶參數的方法調用
    MethodInfomi=aGetMethod(WritePrivateBindingFlagsInstance|BindingFlagsNonPublic)
    strings=(string)miInvoke(objnull)//私有類型方法調用
    //ConsoleWrite(s
    PropertyInfo[]piArr=aGetProperties
    (BindingFlagsInstance|BindingFlagsNonPublic|BindingFlagsPublic)
    foreach(PropertyInfopiinpiArr)
    …{
    //ConsoleWrite(piName)//顯示所有的方法
    }
    PropertyInfopi=aGetProperty(Writea
    //piSetValue(objWriteanull)
    //ConsoleWrite(piGetValue(objnull))
    PropertyInfopi=aGetProperty
    (WritebBindingFlagsInstance|BindingFlagsNonPublic|BindingFlagsPublic)
    piSetValue(objWritebnull)
    //ConsoleWrite(piGetValue(objnull))
    FieldInfofi=aGetField(Write
    //ConsoleWrite(fiGetValue(obj))
    ConstructorInfo[]ci=aGetConstructors()
    foreach(ConstructorInfociinci
    …{
    //ConsoleWrite(ciToString())//獲得構造函數的形式
    }
    ConstructorInfoasCI=aGetConstructor(newType[]…{
    typeof(string)typeof(string)})
    //ConsoleWrite(asCIToString())
    Webtestinterfaceobj=(Webtestinterface)tCreateInstance
    (WebtestReflectTest
    WebtestReflectTestobj=(WebtestReflectTest)tCreateInstance(WebtestReflectTest
    //ConsoleWrite(objadd())典型的工廠模式
    foreach(TypettintGetTypes())
    …{
    if(ttGetInterface(interface)!=null)
    …{
    Webtestinterfaceobj=(Webtestinterface)ActivatorCreateInstance(a)
    //ConsoleWrite(objadd())
    }
    }
    TestDelegatemethod=(TestDelegate)DelegateCreateDelegate
    (typeof(TestDelegate)objWriteString
    //動態創建委托的簡單例子
    ConsoleWrite(method(str))
    ConsoleRead()
    }
    }

    在這裡我把我們常用的方法屬性等全部整理了出來大家不要嫌棄亂靜下心來自己按照我的分隔一部分一部分的來保證你對C#反射方法的學習會事半功倍當然有關於其方法我會繼續補充想了這麼些就先寫下來吧


From:http://tw.wingwit.com/Article/program/net/201311/11178.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.