国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 湘乡市| 临西县| 屏边| 湖北省| 安陆市| 勐海县| 亚东县| 贵阳市| 武义县| 宣威市| 蓝田县| 兴城市| 修水县| 汤阴县| 禹州市| 鹿邑县| 荣成市| 焦作市| 新疆| 南郑县| 宁安市| 霍林郭勒市| 大方县| 景德镇市| 从化市| 女性| 灵川县| 北票市| 扶沟县| 上思县| 阿图什市| 忻州市| 湖北省| 亳州市| 怀集县| 嘉善县| 宜宾县| 宜兰县| 梅河口市| 房山区| 阿图什市|