![]() |
1
6
克里斯提到的国际奥委会方法可能是最好的,但如果不能做到这一点,我能想到的“最佳”解决方案就是做一些有反射力和属性的事情:
在主方法中添加了对initonLoad.initialise()的调用。 您可以去掉该属性,但这可能会导致不必要的类型被初始化,并且不必要地消耗内存(如上面代码中的bar)。 值得注意的是,这不会处理动态加载的任何程序集中包含的类型,除非您再次调用初始化,但基于您的问题(“在程序启动时自动实例化”),这听起来不像是问题。 |
![]() |
2
5
虽然.NET模块理论上可以(IIRC)对模块加载等作出反应,但这并不是通过C_实现的。在某些框架(如ASP.NET)中,您可以通过配置使用钩子,例如通过处理程序或global.asax.cs对其进行黑客攻击,但是对于常规的C应用程序(控制台、WinForm等),您必须手动触发它。例如,类上承载
那么:这里的用例是什么?什么时候懒惰的加载方法不好? |
![]() |
3
4
基于你想做的,我放弃了真正单身的想法,转而使用IOC图书馆。 查看结构图、城堡温莎、Ninject和/或Autopac。 这将允许您通过IOC库创建一个单独的类,可以拥有任意多的类,但它只是一个普通的旧类。 单例存在一个问题,那就是它们确实会破坏应用程序的可测试性(通过单元测试)。 只需在谷歌搜索“被认为有害的单身汉”,你就会看到更多的参考资料。 或者,也可以使用简单的类工厂/方法工厂模式。 |
![]() |
4
2
我怀疑这不可能从
|
![]() |
5
1
您基本上要求.NET框架在加载程序集时调用某个函数。该函数将是pclass实例注册器。
没有
|
![]() |
6
1
切切地说,让我指出这并不是通常实现的单例模式。下面是C中的常规(简化)实现(不包括线程安全等内容,以实现简洁性):
您的代码中的这一行甚至不应该编译!
说了这么多,我同意那个询问你的用例的人。那就好了。=) |
![]() |
7
0
我不相信你想要的在.NET框架中是可能的。基本上,您希望类似于运行时的东西通知类型,或者对类型调用一些预定义的静态方法,以通知应用程序已加载并正在运行,或者提供类似的机制。考虑一下开销。运行时唯一确保的是自动调用程序的主入口方法。就是这样。在那里,您可以设置和初始化事物,但没有自动的功能。您仍然显式地挂接事情和进行方法调用。 |
![]() |
8
0
“pclass将有一个静态成员,该成员是pclass的集合…” 听起来像是可以通过反射轻松完成的事情。您不需要在启动时运行的代码;只要您需要,就可以构建这些类的列表。 下面是一个示例,当您第一次读取Instances属性时,将加载列表一次,将查找当时加载的所有程序集(如果您只想查找与pclass相同的程序集,但您的问题没有指定要查找的程序集,则可以将此过程简化一点),并将添加任何列表的pclass子代(但不是pclass本身)。每个pclass子代都需要一个无参数的构造函数,但不需要任何类构造函数。
|
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |