2014-03-03 74 views
0

我想知道是否可以使用Reflection或其他方法通過將className作爲字符串傳遞給方法來調用方法中的構造函數。這是在解釋命令的情況下完成的。試圖避免交換語句(我在學校有一些奇怪的任務,我正在尋找我的考試捷徑)。是否可以從方法中的字符串參數調用構造函數?

Class SomeClass 
    { 
     //irrelevant code here 

     public BaseClass SomeMethod(string constructorName) 
     { 
     //call constructor here through string parameter to avoid switch statements 
     //for example string constructorName=SomeDerivedClassName 
     // and the result should be: 
     return SomeDerivedClassName(this.SomeProperty,this.SomeOtherPropertY); 
     } 

    } 

回答

2

試着這麼做:

class SomeClass 
{ 
    //irrelevant code here 

    public BaseClass SomeMethod(string constructorName) 
    { 
    // possibly prepend namespace to 'constructorName' string first 

    var assemblyToSearch = typeof(SomeClass).Assembly; 
    var foundType = assemblyToSearch.GetType(constructorName); 

    return (BaseClass)Activator.CreateInstance(foundType, 
     this.SomeProperty, this.SomeOtherPropertY); 
    } 
} 

當然,如果這個類可以在不同的組件,相應地修改代碼。

這裏假設有問題的構造函數是public

+0

謝謝下面張貼了測試解決方案。順便說它不會找到構造函數,除非它們被聲明爲公共的。 –

相關問題