• C#结构体(二)


    说说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;

          }

     }

    会发现,如果是个有参构造函数,在构造中必需去初始化结构中的全局变量,因为如果用有参构造函数的话,无参的就不会得到调用,结构中的全局变量就得不到初始化,所以必需在有参构造函数中去初始化它。如果有多个全局变量,都得在这个有参构造函数中去实例化它们。
  • 相关阅读:
    主效应|处理误差 |组间误差|处理效应|随机误差|组内误差|误差|效应分析|方差齐性检验|SSE|SSA|SST|MSE|MSA|F检验|关系系数|完全随机化设计|区组设计|析因分析
    第二类错误|检验统计量|左偏|右偏|P值
    估计量|估计值|置信度|置信水平|非正态的小样本|t分布|大样本抽样分布|总体方差|
    参数|统计量|抽样分布|估计标准误差|标准误差|标准误|标准差|二项分布|泊松分布|中心极限定理|样本方差|
    ruby 分析日志,提取特定记录
    find 找出大文件
    momentjs 求小时差异
    linux下对date和timestamp的互转
    golang protobuf SetExtension
    对文本中的某两列求和,请统计重复出现次数
  • 原文地址:https://www.cnblogs.com/jxgxy/p/1506908.html
Copyright © 2020-2023  润新知