zoukankan      html  css  js  c++  java
  • C# 结构体

    1,结构体不能出现在继承关系中,除了继承接口。

      结构体不能继承类或结构,也不能被类或结构继承,只可以继承接口

    2,struct不能定义默认构造函数(无参构造函数),也不能定义析构函数。class对这两点都无限制。

    3,如果struct提供了带参构造函数,则它的所有字段(变量)都必须在构造函数中初始化,否则编译报错。class对此无限制。

    4,成员默认修饰符都是private,在C++中则默认为public

    5,结构体成员变量不能在声明时初始化,即不能带有初始值。class对此无限制

    using System;
    delegate string DTE(int x, string s);
    
    class MYTestX
    {
        struct ST
        {
            //public int x = 3; //错误,不能在结构体中这样初始化变量
            public int x;
            public int y;
            //结构体有默认构造函数,我们不能定义它
            //ST()//错误,结构体不能有无参构造函数//{
            //}
    
            //若定义了有参构造函数,则必须在此初始化全部成员变量
            ST(int x, int y)
            {
                this.x = x;
                this.y = y;
            }
    
        }
        class CTEST
        {
    
        }
        static void Main(string[] args)
        {
            ST ot = new ST(); //调用默认构造函数,将所有成员置为默认值
            int x = ot.x;
            Console.WriteLine(x);
            ST otx;//在栈上为结构体otx分配空间,大小为两个int(若有其它类型注意字节对齐问题)
            otx.x = 20;
    
            //c#中,任何未初始化的值或类型都不能被使用,其值是未知的
            int yt;
            string s0;
            CTEST otest;//在栈上为otest变量本身分配4或8字节内存(相当于C++的指针),32位机是4字节,64位机是8字节
                //此时并未给otest在堆上分配内存,只有等到new CTEST()时才分配堆内存 Console.WriteLine(otx.x);
    //编译错误 otx.x = 2; //可以,这是赋值操作 Console.WriteLine(yt);//编译错误 Console.WriteLine(s0);//编译错误 Console.WriteLine(otest);//编译错误 } }

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

  • 相关阅读:
    spark视频-Spark Streaming实时计算和流处理
    spark视频-Spark把云计算大数据速度提高100倍以上
    spark视频-Spark on Docker深入揭秘
    spark视频-Spark as a Service
    spark视频-Spark on Yarn
    MyEclipse Web 项目导入 Eclipse 中需要改的文件
    【解决】小米M1刷机教程(卡刷)
    【解决】笔记本发射WiFi
    【解决】U盘装系统(Win7/Win8)& 装双系统
    【解决】Internet访问看似正常(无叹号受限)却打不开网页
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/5927347.html
Copyright © 2011-2022 走看看