C#面向对象程序设计(2)

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);
}

总结 :

  1. 属性分为三类:只读属性、只写属性和读写属性
  2. 同一个类中多个方法使用同一名字,该方法就被称为重载方法 
  3. C# 构造方法是一种特殊的方法,构造方法的名字必须与定义它的类名完全相同,并且没有返回类型 
  4. 构造方法是在使用 new 关键字创建对象时系统自动调用的 
  5. 构造方法是在初始化对象时给对象成员赋初值 

给TA打赏
共{{data.count}}人
人已打赏
C#

C#面向对象程序设计(1)

2022-8-12 15:44:41

C#

C#面向对象程序设计(3)

2022-8-12 19:10:01

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索