加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中的C#Static实例的等价物是什么?

发布时间:2020-12-16 09:49:00 所属栏目:百科 来源:网络整理
导读:我有很多C#代码,我必须用C编写.我对C没有多少经验. 我正在使用Visual Studio 2012来构建.该项目是C中的静态库(不在C/C++LI中). 在C#代码中,有一个类为其创建了一些静态实例 C# namespace MyNamespace{ public class MyClass { //Class Code static public My
我有很多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,我只想在整个程序中使用一个.
我读到它而不是使用静态,我可以使用extern,它告诉编译器变量的定义在另一个文件中,因此我最终只能使用Instance1和Instance2的一个实例而不是多个实例.

所以我尝试过:

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()方法是静态的(附加到类名称空间,而不是单个实例),并且声明一个静态变量即使它是一个局部变量,它也只有一个自身副本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读