题
我最近遇到过一个错误,只有在将库构建为发布版本而不是调试版本时才会显示出来。该库是一个带有COM包装器的.NET DLL,我使用CoCreateInstance在非托管c ++应用程序中从dll创建一个类。当我最终跟踪错误时,它是由访问单个对象引起的。我将单例实例声明为:
private static readonly MyObjectType s_instance = new MyObjectType;
然后使用:
访问它public static MyObjectType Instance
{
get
{
return s_instance;
}
}
这是失败的。将其更改为:
private static MyObjectType s_instance;
public static MyObjectType Instance
{
get
{
if (s_instance==null)
{
s_instance = new MyObjectType();
}
return s_instance;
}
}
解决了这个问题。任何想法为什么初始使用不起作用,以及是否有任何不利的方式这样做?
发布dll似乎可以从其他托管应用程序中完全使用。
其他提示
重申Marc Gravell所说的内容,但它听起来很像像beforefieldinit问题,这意味着空的静态构造函数是你的解决方案。您需要在类中发布任何和所有构造函数以获得明确的答案。
第二种方法具有延迟加载的优点(这是一个优势)。
不隶属于 StackOverflow