gpt4 book ai didi

c# - 这是一个错误吗?具有私有(private)访问修饰符构造函数的 Activator.CreateInstance?

转载 作者:行者123 更新时间:2023-11-30 13:57:22 25 4
gpt4 key购买 nike

所以我有这个单例代码

public class Foo
{
private static Foo instance;
private Foo() { }
public static Foo Instance
{
get
{
if (instance == null) instance = Activator.CreateInstance<Foo>();
return instance;
}
}
}

这不起作用,因为 Foo 的构造函数被设置为私有(private)(抛出一个异常,即没有找到该类的无参数构造函数)。

传统的 new Foo() 在那里工作(当然)。我知道由于访问限制,Activator 无法访问 Foo 的私有(private)构造函数,但我认为每个对象实例化都是由 Activator 完成的:那么为什么 Activator 在该上下文中不起作用?

谢谢!

最佳答案

Activator 只需要 public 构造函数。如果你对 public 以外的东西感兴趣,那么你需要用不同的方式调用它:

(Foo)Activator.CreateInstance(typeof(Foo), nonPublic:true);

不幸的是,通用版本并没有真正提供任何附加选项...这意味着您可以拆箱。但是,您还进行了反射(reflection),这已经很慢了……所以我猜这更多的是学术性的,而不是性能方面的。

关于c# - 这是一个错误吗?具有私有(private)访问修饰符构造函数的 Activator.CreateInstance?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21266130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com