声明一个变量,如果没有赋值就使用(编译器会给其一个对应类型的默认值,但这不是赋值),那么就会出错,通常情况下编译器可以帮助发现问题(使用未赋值的变量编译通不过)。
构造函数是用来初始化类、结构成员变量的。除了要初始化声明的成员变量,还需要考虑初始化的时机。如下面这个:
1 public struct MyDataCode
2
{
3 string m_name;
4 int m_age;
5
6 public MyData( string name , int age, bool flag) {
7 if (flag) {
8 proccess();
9 }
10 m_name = string .Empty;
11 m_age = 0 ;
12 }
13
14 void proccess() {
15 m_age += 1 ;
16 }
17 // code ecli.
18 //
19 }
3 string m_name;
4 int m_age;
5
6 public MyData( string name , int age, bool flag) {
7 if (flag) {
8 proccess();
9 }
10 m_name = string .Empty;
11 m_age = 0 ;
12 }
13
14 void proccess() {
15 m_age += 1 ;
16 }
17 // code ecli.
18 //
19 }
这个是编译通不过的。需要将所有的成员变量初始化放在最前面。这么更改就可以了:
1
public
struct
MyData
2 {
3 string m_name;
4 int m_age;
5
6 public MyData( string name , int age, bool flag) {
7 m_name = string .Empty;
8 m_age = 0 ;
9 if (flag) {
10 proccess();
11 }
12
13 }
14
15 void proccess() {
16 m_age += 1 ;
17 }
18 // code ecli.
19 //
2 {
3 string m_name;
4 int m_age;
5
6 public MyData( string name , int age, bool flag) {
7 m_name = string .Empty;
8 m_age = 0 ;
9 if (flag) {
10 proccess();
11 }
12
13 }
14
15 void proccess() {
16 m_age += 1 ;
17 }
18 // code ecli.
19 //
20 } 举这个例子只是为了说明在初始成员变量的时候要考虑时机。struct声明的时候是不可以进行赋值操作的,在类中可以。所有的成员变量未被赋值之前,操作成员函数也就不允许。