实例初始化
通过给类添加方法成员,可以简化代码,减少编程的工作量。
类还有一种方法成员,叫做构造函数,它们和类同名,没有返回值,可以用来简化创建实例并且初始化的工作。比如:
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;
}
}