5 c# reflection
考虑以下代码:
public class Test
{
private static readonly Lazy<Test> Lazy = new Lazy<Test>(() => new Test());
private Test()
{
Console.WriteLine("Calling constractor");
}
public static Test Instance
{
get { return Lazy.Value; }
}
public void Something()
{
}
}
Run Code Online (Sandbox Code Playgroud)
当我想从上述类创建实例时,我们应该将构造函数的访问修饰符更改为public,并从该类获取实例,我编写以下代码:
Type type = typeof(Test);
IEnumerable<Type> types = AppDomain.CurrentDomain.GetAssemblies().ToList()
.SelectMany(s => s.GetTypes())
.Where(type.IsAssignableFrom);
Type strtegy = types.FirstOrDefault(x => x.IsClass);
for (int i = 0; i < 10; i++)
{
Activator.CreateInstance(strtegy);
}
Run Code Online (Sandbox Code Playgroud)
如果使用此代码,则每次调用Activator.CreateInstance构造函数都应调用。 因此,我们有很多该类的实例。
如何通过反射从单例类获取实例?
要创建实例,请执行与代码中相同的操作-获取值Instance:
var singleton = typeof(Test).GetProperty("Instance").GetValue(null);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5345 次 |
| 最近记录: |