實例初始化
通過給類添加方法成員,可以簡化代碼,減少編程的工作量。
類還有一種方法成員,叫做構造函數,它們和類同名,沒有返回值,可以用來簡化創建實例並且初始化的工作。比如:
class Employeer
{
public string Name; // 姓名,如果不加public,無法使用zhang.Name訪問數據,以下同
public ushort Age; // 年齡
public bool Sex; // 性別
public Employeer(string name, ushort age, bool sex)
{
Name = name;
Age = age;
Sex = sex;
}
}
這個員工類Employeer定義了一個構造函數,有了這個構造函數,創建員工實例的工作就簡單多了:
Employeer zhang = new Employeer("張能", 28, true); // 員工實例,張能
在C#裏,可以定義不同的構造函數,使用不同的初始值給實例初始化,比如可以增加:
public Employeer(string name, ushort age, string sex)
{
Name = name;
Age = age;
if (sex.CompareTo("男") == 0) // 如果性別是"男"
{
Sex = true; // 用true表示男員工
}
else // 如果不是"男"
{
Sex = false; // 默認爲女員工,用false表示
}
}
新增加的構造函數和第一個有一樣的名稱,只是最後一個參數的類型從bool改成了string,函數裏增加了一個判斷語句,用來區分Sex的值是true還是false。新建一個員工實例,可以寫成這樣:
Employeer employeer = new Employeer("趙風", 29, "女"); // 員工實例,趙風
下面是完整的示例:
using System;
namespace csdn.blog.aerosea
{
class Program
{
static void Main(string[] args)
{
Employeer zhang = new Employeer("張能", 28, true); // 員工實例,張能
Employeer employeer = new Employeer("趙風", 29, "女"); // 員工實例,趙風
// 變量zhang裏面保存的是張能的信息
zhang.ShowInfo();
Console.WriteLine(); // 顯示一個空行
// 變量employeer中保存的是趙風的信息
employeer.ShowInfo();
Console.WriteLine("\n按任意鍵繼續...");
Console.ReadKey();
}
}
class Employeer
{
public string Name; // 姓名,如果不加public,無法使用zhang.Name訪問數據,以下同
public ushort Age; // 年齡
public bool Sex; // 性別
public Employeer(string name, ushort age, bool sex)
{
Name = name;
Age = age;
Sex = sex;
}
public Employeer(string name, ushort age, string sex)
{
Name = name;
Age = age;
if (sex.CompareTo("男") == 0) // 如果性別是"男"
{
Sex = true; // 用true表示男員工
}
else // 如果不是"男"
{
Sex = false; // 默認爲女員工,用false表示
}
}
// 顯示員工信息
public void ShowInfo()
{
Console.WriteLine("姓名:" + Name);
Console.WriteLine("年齡:" + Age);
Console.Write("性別:");
if (Sex)
{
Console.WriteLine("男");
}
else
{
Console.WriteLine("女");
}
}
}
}
比一起學C#(十六)中的示例,新建一個實例是不是簡單一些了呢?
當然,新建實例的兩條語句也可以這樣寫:
Employeer zhang = new Employeer("張能", 28, "男"); // 員工實例,張能
Employeer employeer = new Employeer("趙風", 29, "女"); // 員工實例,趙風
或者:
Employeer zhang = new Employeer("張能", 28, "男"); // 員工實例,張能
Employeer employeer = new Employeer("趙風", 29, "默"); // 只要不是"男",默認是女員工
這幾種寫法,生成的員工實例是一樣的。兵無定勢,水無常形,編程也是如此。
第二個構造函數也可以這樣寫,儘管寫法不一樣,結果是一樣的,兵無定勢嘛:
public Employeer(string name, ushort age, string sex)
{
Name = name;
Age = age;
switch (sex)
{
case "男":
Sex = true;
break;
default:
Sex = false;
break;
}
}