2.1.1字段的缺陷
- C# 中属性的作用是提供灵活的机制来读写私有字段的值
- 对象的特征在类中要使用字段来表示,而字段在实际使用中存在比较大的缺陷
示例:
public class Customer //定义客户类
{
public string name; // 保存姓名
public int age; // 保存年龄
public string address; // 保存住址
}
class Program
{
static void Main(string[] args)
{
Customer liu = new Customer();
liu.name = " 刘升 ";
liu.age = 300; //多输入一个0
liu.address = " 中国 ";
Console.WriteLine(" 客户信息:");
Console.WriteLine(" 姓名:{0}", liu.name);
Console.WriteLine(" 年龄:{0}", liu.age);
Console.WriteLine(" 住址:{0}", liu.address);
}
}
把字段封装成属性
示例:
public class Customer
{
public string name; // 保存姓名
private int age; // 保存年龄 (0 ~ 100)
public int Age {
get{ return age; } //定字段改为私有,并且首字母小写;属性首字母大写
set{
if (value >= 0 && value <= 100){
age = value;
}else{
age = 18;
Console.WriteLine(“ 年龄超过范围,设为默认 18 岁");
}
}
}
public string address; // 保存住址
}
class Program
{
static void Main(string[] args)
{
Customer liu = new Customer();
liu.name = " 刘升 ";
liu.Age = 300; //注意此处是给属性赋值
liu.address = " 中国 ";
Console.WriteLine(" 客户信息:");
Console.WriteLine(" 姓名:{0}", liu.name);
Console.WriteLine(" 年龄:{0}", liu.Age);
Console.WriteLine(" 住址:{0}", liu.address);
}
}
2.1.2属性的使用
- C# 中的属性结合了字段和方法的优点。对于对象的使用者,调用属性的方式和调用字段相同;对于类的实现者,属性是两个类似于方法的代码块,分别是 get 访问器(访问)和 set 访问器(赋值)
- 通过提供不同的访问器,可以将属性分为以下 3 类 :
- 只读属性:只有 get 访问器
- 只写属性:只有 set 访问器
- 读写属性:包含 get 和 set 访问器
示例:
public class Customer
{
public string name; // 保存姓名
private int age; // 保存年龄
public int Age
{
set
{
age = value;
}
}
public string address; // 保存住址
}
class Program
{
static void Main(string[] args)
{
Customer liu = new Customer();
liu.Age = 300;//只写属性不能赋值;
Console.WriteLine(" 年龄:{0}", liu.Age);
}
}
2.1.2属性的使用
Visual Studio 提供了一种比较快捷的方式,能把字段封装成属性,操作步骤为:选中字段 点击右键 快速操作和重构 封装字段
2.2 方法重载
2.2.1方法重载的概念
- C# 语法规定,同一个类中多个方法使用同一名字,该方法就被称为“重载方法”。当一个重载方法被调用时,C# 会根据参数的个数和类型自动调用最恰当的方法来执行
- 由以上描述可以看出,构成方法重载的条件有以下 3 个 :
- 在同一个类中
- 方法名相同
- 参数的类型或个数不同
2.2.2方法重载的使用
下面以魔术师表演魔术为例,实现方法的重载
示例:
class Magician//定义魔术师类
{
public void Performance()
{
Console.WriteLine(" 各位观众好,接下来为大家表演穿墙术! ");
}
public void Performance(string magicName)
{
Console.WriteLine(" 各位观众好,接下来为大家表演 {0} ! ", magicName);
}
public void Performance(int number, string magicName)
{
Console.WriteLine(" 各位观众好,应大家要求,接下来表演 {0} 次 {1} ! ", number, magicName);
}
}
static void Main(string[] args)
{
Magician mag = new Magician();
mag.Performance(); //调用方法1
mag.Performance(" 密室逃生 ");//调用方法2
mag.Performance(3," 扑克魔术 ");//调用方法3
}
注意:方法重载的好处主要体现在调用上,不需要记更多的方法名称,相同功能的方法传递不同的参数,编译器会明确地获知我们要调用哪一个方法。
2.3 构造方法
2.3.1构造方法的定义与使用
- C# 的构造方法是一种特殊的方法,与普通方法相比有以下这些不同
- 构造方法的名字必须与定义它的类名完全相同,并且没有返回类型
- 构造方法是在使用 new 关键字创建对象时系统自动调用的
- 构造方法是在初始化对象时给对象成员赋初始值的
语法:
构造方法名 ( 参数列表 )
{
语句块 ;
}
在使用 new 关键字创建客户对象时对其属性赋值
class Customer
{
private string name; // 姓名
private int age; // 年龄
private string address; // 住址
public Customer(string name, int age, string address)
{
//注意构造方法内是对属性赋值
this.Name = name;
this.Age = age;
this.Address = address;
}
//…属性封装代码省略
}
static void Main(string[] args)
{
Customer cust = new Customer(" 比尔 ", 23, " 美国 ");
Console.WriteLine(" 客户信息:");
Console.WriteLine(" 姓名:{0}", cust.Name);
Console.WriteLine(" 年龄:{0}", cust.Age);
Console.WriteLine(" 住址:{0}", cust.Address);
}
总结 :
- 属性分为三类:只读属性、只写属性和读写属性
- 同一个类中多个方法使用同一名字,该方法就被称为重载方法
- C# 构造方法是一种特殊的方法,构造方法的名字必须与定义它的类名完全相同,并且没有返回类型
- 构造方法是在使用 new 关键字创建对象时系统自动调用的
- 构造方法是在初始化对象时给对象成员赋初值