這裏是我的代碼:如何通過類型名稱的對象轉換,並作爲參數傳遞給另一個方法
using System.Reflection;
Public class ClassA
{
public ClassA()
{
ClassB classB = new ClassB();
classB.UsingType = "ClassD";
ClassB.Do();
}
}
Public class ClassB
{
public string UsingType { get; set; }
public void Do()
{
ClassC classC = new ClassC();
Type type = Type.GetType(UsingType);
Object obj = Activator.CreateInstance(type);
classC.Do(obj); // Error : cannot convert from 'object' to 'ClassD'
}
}
public class ClassC
{
public void Do(ClassD classD) // If I change "ClassD" to "Object" It works!!
{
//Do something with classD
}
}
我得到這個錯誤:「無法從‘對象’到‘D類’轉換。 「
如果我改變「做」法「ClassC」從「D類」參數設置爲「對象」的錯誤消失,然後我可以轉換到「D類」,並使用該參數。但那不是我想要的。
有沒有辦法通過「UsingType」字符串投「目標文件」到「D類」(在「ClassB的」的「做」的方法),並擺脫了編譯時錯誤的?
換句話說:(因爲「ClassA的」知道的類型名稱字符串,並將其傳遞到「ClassB的」)我如何從「對象」投給「ClassC」請求的類型?
編譯器cn't知道其運行時類型'obj'實際上是。這些信息僅在實際執行*程序時才存在。因此,即使你能*至少在編譯期間通過使用運行時類型來推斷演員,你所得到的只是一個'object'而不是'ClassA'。這是唱反射的代價:你在編譯時會丟失關於實際時間的任何*信息,因此只能處理'object'。 – HimBromBeere
我的直覺告訴我你的設計有缺陷。你能解釋你想要解決什麼問題嗎?或者你的要求是什麼? –
我想要做的是在運行時通過知道類型名稱來實例化對象並將其傳遞給另一個方法。 –