• 结构struct注意项


    结构Struct相对于类Class是一种轻量级的数据结构,在一般的编程中适当的采用 结构 会收到提高程序执行效率以及增强代码健壮性的效果。

    以下总结一下平时使用结构需要注意的事项:

    1:结构中不能声明不带参数的构造函数;

    using System;
    
    class Test111
    {
     struct TestStruct
     {
       TestStruct()
    {
    }
    }
    public static void Main(string[] args) { TestStruct _s=new TestStruct(); //TestStruct _s1=new TestStruct(); //TestStruct.a=10; Console.WriteLine("结束{0}",_s.ToString()); } }

    如上代码编译就会报错“结构不能包含显式的无参数构造函数”。

    2:结构中的实例字段不能直接初始化;

    using System;
    
    class Test111
    {
     struct TestStruct
     {
      int a=0;//实例字段a,此处在编译时会报错,可以像下面的方式声明即可,结构中默认的构造函数会对这些实例变量进行初始化,这一动作是默认进行的。
    //int a;
    }
    public static void Main(string[] args) { TestStruct _s=new TestStruct(); Console.WriteLine("结束{0}",_s.ToString()); } }

    以上代码编译会报错“结构中不能有实例字段初始值设定项”。

    3:如果结构中有带参数的构造函数,则这一构造函数需要对结构中的所有实例字段进行初始化;

    class Test111
    {
     struct TestStruct
     {
      int a;//实例字段a
      public TestStruct(int a1)
      {
       //this.a=a1;
      }
     }
     public static void Main(string[] args)
     {
      TestStruct _s=new TestStruct();
      Console.WriteLine("结束{0}",_s.ToString());
     }
    }


    以上代码编译会报错“在控制返回到调用方法之前,字段“Test111.TestStruct.a”必须完全赋值”。

     4:结构中只可以重写System.ValueType类中的方法;

    using System;
    
    class Test111
    {
     struct TestStruct
     {
      int a;//实例字段a
      public TestStruct(int a1)
      {
       this.a=a1;
      }
      //结构隐式继承System.ValueType,且不可以从其他类继承,故只可以重写System.ValueType中的方法
      public override string ToString()
      {
       return a.ToString();
      }
     }
     public static void Main(string[] args)
     {
      TestStruct _s=new TestStruct();
      Console.WriteLine("结束{0}",_s.ToString());
     }
    }

    5:当结构中不包含实例字段时可以不使用 new 关键字进行结构的初始化;否则必须使用 new 来初始化。

    using System;
    
    class Test111
    {
     struct TestStruct
     {
      public int Fun(int arg1,int arg2)
      {
       return arg1+arg2;
      }
     }
    public static void Main(string[] args)
     {
      TestStruct _s;//没有使用new关键字
      Console.WriteLine("结束{0}",_s.Fun(1,2));
     }
    }

    6:声明一个结构时不可以用sealed、static、abstract来修饰,因为结构本身是不支持继承和被继承的(可以实现接口的定义),且结构中成员不可以使用protected以及preotected internal来修饰;结构中成员也不可以使用abstract以及virtual这些修饰词。

    7:不能 TestStruct   _s = null 实例化一个结构对象。

  • 相关阅读:
    C++ 数组array与vector的比较
    C/C++头文件区别
    C/C++ 标准输入输出重定向
    C文件读写
    输入输出重定向
    【剑指offer26 二叉搜索树与双向链表】
    【剑指offer25 复杂链表的复制】
    【剑指offer23 二叉搜索树的后序遍历序列】
    【剑指offer22 从上往下打印二叉树 & 60 把二叉树打印成多行】
    【剑指offer21 栈的压入、弹出序列】
  • 原文地址:https://www.cnblogs.com/xinzeda/p/2970720.html
Copyright © 2020-2023  润新知