我正在试图弄清楚如何执行以下操作(在我的头顶输入,因此它可能不是100%准确,但它应该得到重点)在csharp中,但我'我真的不确定如何。
class Test
{
private __construct() {}
public static function GetInstance($name)
{
if (file_exists($name . ".php"))
{
return new $name();
}
else
{
return null;
}
}
}
我知道如何根据输入获取我想要的对象,但是我必须返回一个Object,因为我不确定调用者会请求哪一个。但是,当我不知道如何访问返回的Object中的方法时。
答案 0 :(得分:2)
假设我正确理解了您的伪代码,您必须将结果对象强制转换为您期望的类型,以便您可以访问该类型的公共方法:
Foo myFoo = (Foo) Test.GetInstance("Foo");
string bar = myFoo.Bar();
同时检查基本执行GetInstance
方法操作的Activator.CreateInstance()
方法。
答案 1 :(得分:0)
如果我正确解释您的问题,我认为您想要按类型名称创建对象。有很多方法可以做到这一点。这是一个例子:
public static class Test
{
public object CreateInstance(string typeName)
{
Type type = Type.GetType(typeName);
return Activator.CreateInstance(type);
}
}
这假定typeName是包含命名空间的完整类型名称,并且此类型具有默认(无参数)构造函数。否则该方法将失败。像这样使用(您必须转换为User您的类型才能访问用户类型中的方法。
User user = (User)Test.CreateInstance("Some.Namespace.User");
// Now methods and propertes are available in user
Console.WriteLine("User name: "+user.Name);
答案 2 :(得分:0)
// create instance of class DateTime
DateTime dateTime = (DateTime)Activator.CreateInstance(typeof(DateTime));
// create instance of DateTime, use constructor with parameters (year, month, day)
DateTime dateTime = (DateTime)Activator.CreateInstance(typeof(DateTime),
new object[] { 2008, 7, 4 });