C中的C#Static实例的等价物是什么?
我有很多C#代码,我必须用C编写.我对C没有多少经验.
我正在使用Visual Studio 2012来构建.该项目是C中的静态库(不在C/C++LI中). 在C#代码中,有一个类为其创建了一些静态实例 C# namespace MyNamespace { public class MyClass { //Class Code static public MyClass Instance1 = new MyClass(/*parameters*/); static public MyClass Instance2 = new MyClass(/*other parameters*/); 我需要在C中做类似的事情,到目前为止我得到了: C namespace MyNamespace { class MyClass { //Class Code }//end of class static MyClass& Instance1 = MyClass(/*parameters*/); static MyClass& Instance2 = MyClass(/*other parameters*/); }//end of Namespace 但是,从我读到的内容来看,这并不完全相同,通过添加单词“static”,我正在做的是我的Instance1和Instance2仅在当前文件的范围内可见.它是否正确? 所以我不想要一堆Instance1,我只想在整个程序中使用一个. 所以我尝试过: C MyClass.h extern MyClass& Instance1; extern MyClass& Instance2; C MyClass.cpp MyClass& Instance1 = MyClass(/*parameters*/); MyClass& Instance2 = MyClass(/*other parameters*/); 这构建得很好,但是当我尝试运行我的测试时,它们会抛出一个错误: Failed to set up the execution context to run the test 在使用extern之前我的测试运行得很好,但是当我添加它时它们将无法正常工作.这让我相信我没有正确宣布事情,或者Visual Studio 2012可能不能正确支持某些功能? 解决方法
根据使用的地方,静态在C中有不同的含义.当与变量声明一起使用时,它意味着你在想什么:没有变量的链接,它只能用于声明它的文件,甚至,如果它是一个局部变量,它只有一个副本(好)声明在它们被使用的地方附近应该是静态的局部变量的方法.
在类声明中虽然static意味着与C#中的相同,但区别在于您必须具有实际声明静态变量的源文件(或在方法中将其声明为静态),这是因为此静态变量必须具有空间保留在某个地方.这可以通过多种方式完成,例如: static MyClass& instance() { static MyClass realInstance; return realInstance; } 通过这种方式,您可以看到使用static的两种方式:一种是告诉instance()方法是静态的(附加到类名称空间,而不是单个实例),并且声明一个静态变量即使它是一个局部变量,它也只有一个自身副本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |