D_M

导航

结构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 实例化一个结构对象。

 

posted on 2013-03-20 14:25  D_M  阅读(378)  评论(0编辑  收藏  举报