C# 如何使用反射获取类的实例?

C# 如何使用反射获取类的实例?,c#,reflection,C#,Reflection,如何使用C#反射获取类的实例 比如说, public class Sample { } Sample s = new Sample(); Sample s2 = new Sample(); Sample s3 = new Sample(); 如何使用反射获取示例类的这三个实例?使用System.Activator.CreateInstance您可以使用反射创建类的实例。例如 System.Type type = typeof(Sample); object obj = Activator.C

如何使用C#反射获取类的实例

比如说,

public class Sample
{
}

Sample s = new Sample();
Sample s2 = new Sample();
Sample s3 = new Sample();

如何使用反射获取示例类的这三个实例?

使用
System.Activator.CreateInstance
您可以使用反射创建类的实例。例如

System.Type type = typeof(Sample);
object obj = Activator.CreateInstance(type);
在本例中,
obj
是您新创建的实例。此方法的重载很少,本文提供了更多信息

根据评论进行编辑
如果您希望能够检索一个类的所有实例,我想这是不可能使用托管代码的。您将需要使用非托管代码来分析托管堆,或者使用来枚举托管堆中分配的所有对象。

s
-
s3
局部变量还是字段?需要知道的是,要决定这个问题应该是重复的。。。您也可以自己检查搜索结果。我不想使用反射创建对象的可能重复项。我想列出以前使用ReflectionTanks创建的类实例。因此,所有关于实例化a类的答案和链接都是错误的。这仍然留下了一个问题:在哪里声明s-s3?如前所述,如果它们在一个方法中声明,并且从未存储在其他地方,GC将只收集它们,使它们不可能安全地检索。请详细说明您的具体用例,以便我们提供帮助。上面和下面的内容也一样。另一方面,您可以使用[if(s is Sample)]来确定变量是否也是该类型,如果它不为null,则s仍然可用(对于其他变量也是如此)。我们是否可以以相同的方式传递泛型类型,如
System.type type=typeof(T)?您好,我不想使用反射创建对象。我想使用refelecion@MillerKoijam是的,你绝对可以用generics@Ram对不起,我误读了你的问题,我用坏消息更新了我的答案
var s = (Sample)Activator.CreateInstance(Sample);
var s2 = (Sample)Activator.CreateInstance(Sample);
var s3 = (Sample)Activator.CreateInstance(Sample);