首页 > 代码库 > 2.结构篇

2.结构篇

1.含义:结构(struct)是使用 struct关键字定义的,与类相似,都表示可以包含数据成员和函数成员的数据结构。

2.申明

 public struct Student

{

   public string name; //定义结构时的数据字段是不能赋初始值的
       public int age;
       public Student(string name,int age) // 结构的构造函数
       {
      stu.name = name;
      stu.age = age;
   }
       public void SayHi()
       {

            Console.WriteLine("Hello World !"); 

       }

}

3.结构的构造函数

我们知道结构不能使用默认的构造函数,只能使用带参数的构造函数,当定义带参数的构造函数时,一定要完成结构所有字段的初始化,如果没有完成所有字段的初始化,编译时会发生错误­。

4.为什么结构不能自定义没有无参的构造函数?

结构类型的构造函数与类的构造函数类似,用来初始化结构的成员变量,但是struct不能包含显式默认构造函数,
因为编译器将自动提供一个构造函数,此构造函数将结构中的每个字段初始化为默认值表中显示的默认值。
然而,只有当结构用new实例化时,才会调用此默认构造函数。对值类型调用默认构造函数不是必需的

5.结构可以使用静态构造函数吗?

可以,结构的静态构造函数与类的静态构造函数所遵循的规则大体相同。

6.结构的静态构造函数何时将触发呢?

结构的实例成员被引用,结构的静态成员被引用,结构显示声明的构造函数被调用。但是创建结构类型的默认值不会触发静态构造函数。

7.为什么结构不能自定义无参数的构造函数? 

结构类型的构造函数与类的构造函数类似,用来初始化结构的成员变量,但是struct不能包含显式默认构造函数,
8.特征(引用MSDN)

  • 与类不同,结构的实例化可以不使用 new 运算符。

  • 结构可以声明构造函数,但它们必须带参数。

  • 一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType,后者继承自 System.Object

  • 结构可以实现接口。

  • 结构是值类型,而类是引用类型。

9.结构与继承:
一个结构声明可以指定实现的接口列表,但是不能指定基类。
由于结构不支持类与结构的继承,所以结构成员的声明可访问性不能是protected或protectedinternal。结构中的函数成员不能是abstract或 virtual,因而override修饰符只适用于重写从System.ValueType继承的方法。

 

 

2.结构篇