访问对象类型中的方法

时间:2011-08-13 21:43:45

标签: c# .net datetime

我正在试图弄清楚如何执行以下操作(在我的头顶输入,因此它可能不是100%准确,但它应该得到重点)在csharp中,但我'我真的不确定如何。

class Test
{
  private __construct() {}

  public static function GetInstance($name)
  {
      if (file_exists($name . ".php"))
      {
            return new $name();
      }
      else
      {
            return null;
      }
  }
}

我知道如何根据输入获取我想要的对象,但是我必须返回一个Object,因为我不确定调用者会请求哪一个。但是,当我不知道如何访问返回的Object中的方法时。

3 个答案:

答案 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)

希望this线程也有帮助。 Here是一些反思的例子。

// 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 });