国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

如何動(dòng)態(tài)調(diào)用DLL中類的方法以及屬性

2024-07-21 02:26:13
字體:
供稿:網(wǎng)友

c#中可以通過assembly來動(dòng)態(tài)加載dll,然后由它創(chuàng)建類型,接著通過類型的invokemember方法來調(diào)用dll中類的方法以及屬性。

 

為了方便說明一下的方法,先說明一下dll的代碼,大致如下:

using system;

namespace clstestdll

{

    /// <summary>

    /// summary description for testdll.

    /// </summary>

    public class testdll

    {

        private string strname;

        public testdll()

        {

            //

            // todo: add constructor logic here

            //

            strname = "";

        }

 

        public string getvalue( int ncount )

        {

            return string.format( "count is {0}!", ncount );

        }

 

        public static string getnewvalue( int ncount )

        {

            return string.format( "new count is {0}!", ncount );

        }

 

        public string name

        {

            get{ return strname;}

            set{ strname = value;}

        }

    }

}

 

大致的步驟如下:

首先加載dll,具體如下:

    // load assembly from dll file

    assembly assembly = assembly.loadfrom( "clstestdll.dll");  

 

其次,用加載的assembly來定義指定的類型,例如:

    // create new type

    type t = assembly.gettype( "clstestdll.testdll");

 

       然后就可以通過新建的類型來調(diào)用類的方法。

       如果是類的靜態(tài)方法,可以直接調(diào)用,如:

    // call static member function by name

    string strreturn = (string) t.invokemember("getnewvalue",

        bindingflags.declaredonly |

        bindingflags.public |

        bindingflags.static | bindingflags.invokemethod,

        null,

        null,

        new object[]{ 12 } );

 

       如果是類的非靜態(tài)方法或?qū)傩裕瑒t需要通過類型,先生成類的對象,如:

    // create new object of specific class name

    object obj = t.invokemember(

        null,

        bindingflags.declaredonly |

        bindingflags.public | bindingflags.nonpublic |

        bindingflags.instance | bindingflags.createinstance,

        null,

        null,

        null );

 

       接著,就可以通過“obj”對象來進(jìn)行調(diào)用了,如:

    // call member function by name

    strreturn = (string) t.invokemember("getvalue",

        bindingflags.declaredonly |

        bindingflags.public | bindingflags.nonpublic |

        bindingflags.instance | bindingflags.invokemethod,

        null,

        obj,

        new object[]{ 12 } );

 

    // set class property

    t.invokemember("name",

        bindingflags.declaredonly |

        bindingflags.public | bindingflags.nonpublic |

        bindingflags.instance | bindingflags.setproperty,

        null,

        obj,

        new object[] {"test"} );

 

    // get class property

    strreturn = (string) t.invokemember("name",

        bindingflags.declaredonly |

        bindingflags.public | bindingflags.nonpublic |

        bindingflags.instance | bindingflags.getproperty,

        null,

        obj,

        null);

上一篇:C#調(diào)用輸入法

下一篇:SQLHelper.cs

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 通城县| 定兴县| 海兴县| 禄丰县| 墨竹工卡县| 清丰县| 神池县| 公安县| 宜丰县| 徐水县| 容城县| 通榆县| 运城市| 甘南县| 五大连池市| 鹤庆县| 巩义市| 招远市| 宣武区| 安新县| 新蔡县| 女性| 灵川县| 石楼县| 鄱阳县| 达州市| 泰顺县| 慈利县| 内江市| 青海省| 博乐市| 壶关县| 吐鲁番市| 稻城县| 乌拉特中旗| 博客| 铁岭县| 玉溪市| 旅游| 白水县| 乌鲁木齐县|