.net知识和学习方法系列(二十四)struct中的全局变量

简介:
C# , 数据类型有两种:值类型和引用类型([url]http://www.cnblogs.com/axzxs2001/archive/2008/09/15/1291090.html[/url] )。在值类型中,struct 是非常重要的一个类型,可以说struct 是一个真正的值类型,因为struct 是从System.ValueType 继承的,并且System.ValueType 还是一个抽象类,不属于值类型,同时简单类型,枚举等本质上都是一个struct
现在就说说struct struct 既然是个值类型,自然应该在线程堆栈上。对于struct ,在一定程度上与class 非常相像,接下来,我们来分析一下。
    class program
    {
        static void Main(string[] args)
        {
            STR str1;
            str1.Method("str1");// 第一种方法,直接定义
 
            STR str2 = new STR();
            str2.Method("str2"); // 第二种方法,通过new 关键字
        } 
    }
    struct STR
    {
        public void Method(string Par)
        {
            Console.WriteLine(" 参数是:"+Par);
        }
}
我们看到,结构中,我们可能有两种方法来调用结构内部的成员,一个是直接定义来调用,也可以通过new 关键字来定义调用,这是与类不同的,类必需经过实例化(new )来定义调用(静态成员是通过类名调用,没有定义)。
接下来再看一个例子。
 class program
    {
        static void Main(string[] args)
        {
            STR str1;// 第一种
            str1.count = 100;// 赋值
            Console.WriteLine(str1.count);
 
            STR str2 = new STR();// 第二种
            Console.WriteLine(str2.count);
                  
        } 
    }
    struct STR
    {
      public int count;
}
当结构体中定义一个全局变量时(类中叫字段),这个count 是没有值的,这是与类不同的,在类中,所有的字段都有默认值,结构中是没有的。既然没有默认值,那在第二种实例化直接调用时,str2.count 输出的为什么是0 ,这个0 是没有事前赋值的。如果是类,我们知道,类是有构造函数的,如果我们不显式写上构造函数,CLR 会自动给我们加上一个没有参数的构造函数的,并且这个构造函数是可以被显式的写出来的。同样,结构也是有一个构造函数,但这个构造函数是不能够写出来的,并且这个构造函数很特别,我们从第二种就能看出,只要用new 关键字来实例化结构,就会把count 给初始化成0 ,也就是那个不能写出来的无参构造函数会初始化所有的结构中的全局变量。对于第一种,因为没有调用无参的构造函数,所以必需去显式的给结构中的全局变量去赋值。
如果结构里有有参构造函数,代码如下:
    class program
    {
        static void Main(string[] args)
        {
            STR str = new STR("");// 实例化
            Console.WriteLine(str.count);
        } 
    }
    struct STR
    {
      public int count;
      public STR(string str)
      {
          count = 1;
      }
 }
会发现,如果是个有参构造函数,在构造中必需去初始化结构中的全局变量,因为如果用有参构造函数的话,无参的就不会得到调用,结构中的全局变量就得不到初始化,所以必需在有参构造函数中去初始化它。如果有多个全局变量,都得在这个有参构造函数中去实例化它们。
综合上面,可以看出,结构可以用 new 来实例化,也可以不用 new 来实例化,如果用 new ,就必需,必需初始化结构里的全部局部变量,在这里,无参的构造构函是不需要写出来的,自动实现全局变量的初始化。
 

















本文转自桂素伟51CTO博客,原文链接:http://blog.51cto.com/axzxs/149946  ,如需转载请自行联系原作者


相关文章
|
6月前
|
API C# 图形学
DotNetGuide新增C#/.NET/.NET Core充电站(让你学习不迷路)
DotNetGuide新增C#/.NET/.NET Core充电站(让你学习不迷路)
|
6月前
|
Windows
​史上最详细的Windows10系统离线安装.NET Framework 3.5的方法(附离线安装包下载)
​史上最详细的Windows10系统离线安装.NET Framework 3.5的方法(附离线安装包下载)
551 0
|
2月前
|
机器学习/深度学习 存储 编解码
多任务学习新篇章 | EMA-Net利用Cross-Task Affinity实现参数高效的高性能预测
多任务学习新篇章 | EMA-Net利用Cross-Task Affinity实现参数高效的高性能预测
42 0
|
3月前
|
NoSQL 关系型数据库 MongoDB
【DotNetGuide】C#/.NET/.NET Core学习、工作、面试指南
【DotNetGuide】C#/.NET/.NET Core学习、工作、面试指南
105 0
|
3月前
|
开发框架 .NET API
C#/.NET/.NET Core推荐学习书籍(23年12月更新)
C#/.NET/.NET Core推荐学习书籍(23年12月更新)
221 0
|
11天前
|
开发框架 .NET API
C#/.NET/.NET Core推荐学习书籍(已分类)
C#/.NET/.NET Core推荐学习书籍(已分类)
173 0
|
5月前
|
设计模式 程序员 开发工具
零基础程序员想要学好.Net,跟着这7个步骤学习就可以了
零基础程序员想要学好.Net,跟着这7个步骤学习就可以了
27 0
|
5月前
|
前端开发 关系型数据库 MySQL
初学者程序员要学好.Net,只要学习这几个框架就够了
初学者程序员要学好.Net,只要学习这几个框架就够了
41 0
|
5月前
|
开发框架 .NET API
C#/.NET/.NET Core推荐学习书籍
C#/.NET/.NET Core推荐学习书籍
|
5月前
|
开发框架 .NET API
.net gRPC初探 - 从一个简单的Demo中了解并学习gRPC
.net gRPC初探 - 从一个简单的Demo中了解并学习gRPC
40 0