zoukankan      html  css  js  c++  java
  • 结构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 实例化一个结构对象。

  • 相关阅读:
    Java异常处理和设计
    一次qps测试实践
    Alternate Task UVA
    Just Another Problem UVA
    Lattice Point or Not UVA
    Play with Floor and Ceil UVA
    Exploring Pyramids UVALive
    Cheerleaders UVA
    Triangle Counting UVA
    Square Numbers UVA
  • 原文地址:https://www.cnblogs.com/xinzeda/p/2970720.html
Copyright © 2011-2022 走看看