我正在调用一个具有针对该方法声明的类型的函数,即
public T Get<T>().
我从文件中读取一个字符串并通过开关解析它以确定使用的类型,即。
switch (type)
{
case "Text":
item = Get<Text>();
break;
case "Button":
item = Get<Button>();
break;
}
然后我如何从调用它的函数返回Type项?请注意,我不想返回公共父级,因为我需要访问派生类的方法。
public <????> newGet()
{
switch (type)
{
case "Text":
item = Get<Text>();
break;
case "Button":
item = Get<Button>();
break;
}
return item;
}
答案 0 :(得分:3)
使用dynamic
听起来不错。你应该重新考虑你在这里做的事情。
“请注意,我不想返回公共父级,因为我需要访问派生类的方法。”
好的,那么......你要做什么来访问这些方法?使用另一个switch
在类型之间切换,然后调用您想要的方法?为什么这里有两个switch
语句做同样的事情?我不知道你正在处理什么的确切架构,但通常你最好找出你将要回来的类型(即通过返回“Text”或“Button”或其他来自一个函数),然后调用一个强类型函数,该函数可以获取并调用方法。
答案 1 :(得分:1)
您可以考虑使用动态类型。它仅适用于.NET 4.0及更高版本
public dynamic newGet(string type)
{
dynamic item = null;
switch (type)
{
case "Text":
item = "ABC";
break;
case "Number":
item = 1;
break;
}
return item;
}
如您所见,我可以使用newGet返回的字符串的长度
dynamic text= newGet("Text");
Console.WriteLine(text.Length); //"ABC".Length = 3
dynamic number= newGet("Number");
Console.WriteLine(number + 5); //1 + 5 = 6
这也可以。请注意运行时异常
string text= newGet("Text"); //You can assign to
Console.WriteLine(text.Length); //"ABC".Length = 3
int number= newGet("Number");
Console.WriteLine(number + 5); //1 + 5 = 6