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继承的方法。