C#reflection从类型中获取对象

时间:2011-03-14 20:04:41

标签: c# reflection

我有一个Type对象。 我想从这种类型获取对象实例。 (只是使用此对象的ToString()方法)。 见:

    public class P
{
    public string s;
}

class Program
{
    static void Main(string[] args)
    {
        P p = new P();
        p.s = "foobar";
       Type t = p.GetType();
       P p2 = ((t.ToObjet()) as P).s;

       Console.WriteLine(p2.s);
    }
}

3 个答案:

答案 0 :(得分:10)

Activator.CreateInstance就是你想要的。

Type givenType;
var obj = Activator.CreateInstance(givenType);
...
var obj = Activator.CreateInstance(givenType) as GivenType;

编辑:根据您的修改,您想要的Type上的扩展方法(ToObject)实际上就是上面的代码。它必须创建一个新的,因为您无法确定源对象是否仍然存在,即使使用该类型,您也可以遇到该类型具有多个实例的场景。

答案 1 :(得分:1)

您无法获取实例。类型在所有实例之间共享,因此您想要的是不可能的。

例如:如果你知道某个东西是一个整数,你就不知道它究竟具有哪个值。 (整数是你的类型,值是一个具体的例子。)

答案 2 :(得分:1)

没有办法做到这一点。一个原因是GetType将为所有相同类型的实例返回相同的Type实例。

您可以这样测试:

// this will print "True"
Console.WriteLine(object.ReferenceEquals("one".GetType(), "two".GetType()));

在这两个不同的字符串实例上调用GetType将返回相同的Type实例,因此显然不可能仅根据Type实例返回其中一个实例。