概念:面向对象是把要解决的问题按照一定的规划划分为多个独立的对象,然后通过调用对象的方法来解决问题。这样,当应用程序功能发生变动时,只需要修改个别的对象就可以了。使用面向对象编写的程序具有良好的可移植性和可扩展性。
类的定义
在程序中创建对象,首先需要定义一个类,在定义类时需要用到关键字class声明。
下面我通过两个例子来学习如何定义一个类:
namespace Demo1
{
/// <summary>
/// 定义学生类
/// </summary>
public class Student
{
//敏感数据,private 缺省
//私有成员的命名 通常加_前缀
private string _id;//学号
private string _name;//姓名
private DateTime _birthday;//生日
private bool _sex;//性别
//构造函数方法是创建对象(实例)时自动执行的方法
//类的构造函数来初始化
//方法名与类名相同,形参可自定义
public Student(string id,string name,DateTime birthday,bool sex)
{
_id = id;
_name = name;
_birthday = birthday;
_sex = sex;
}
//构造方法可定义多个,参数不能相同
public Student()
{
_id = "";
_name = "";
_birthday = DateTime.MinValue;
_sex = true;
}
public void PrintStuInfo()
{
Console.WriteLine($"学号:{_id},姓名:{_name},性别:{(_sex ? "男" : "女")},生日:{_birthday.ToString("yyyy-MM-dd")}");
}
}
}
namespace Demo1
{
class Program
{
static void Main(string[] args)
{
Student stu1 =
new Student("2022001", "张无忌", DateTime.Parse("2004-01-12"), true);
Student stu2 =
new Student("2022002", "赵敏", DateTime.Parse("2004-11-12"), false);
Student stu3 =
new Student("2022003", "殷黎", DateTime.Parse("2004-05-08"), true);
Student stu4 =
new Student("2022004", "周芷若", DateTime.Parse("2004-10-24"), false);
//使用无参的构造方法来创建实例stu5
Student stu5 = new Student();
stu1.PrintStuInfo();
//不能对私有数据进行修改 stu1._name
stu2.PrintStuInfo();
stu3.PrintStuInfo();
stu4.PrintStuInfo();
stu5.PrintStuInfo();
Console.ReadKey();
}
}
}
以上代码运行后的结果如下:
namespace Demo2
{
/// <summary>
/// 银行账号类的定义
/// </summary>
public class BankAccount
{
private string _accountID;//账号
private decimal _balance;//余额
private DateTime _lastTransactionDatetime;//最后的交易时间
//通过定义字段来对成员进行读写
public decimal Balance
{
get { return _balance; }
set { _balance = value; }
}
//:this("",0M) 表示调用类自己本身的两个参数的构造方法
public BankAccount(string accountID):this(accountID,0M)
{
}
//this表示类自己本身
public BankAccount(string accountID,decimal balance)
{
this._accountID = accountID;//初始化账号
this._balance = balance; //初始化余额
this._lastTransactionDatetime = DateTime.Now;//初始化为当前系统的时间
}
//打印交易内容
public void PrintAccountInfo()
{
Console.WriteLine($"账号{this._accountID}\t余额{this._balance:c2}\t最后交易时间{this._lastTransactionDatetime}");
}
}
}
namespace Demo2
{
class Program
{
static void Main(string[] args)
{
BankAccount ba1 = new BankAccount("1234567890", 1000M);
ba1.PrintAccountInfo();
ba1.Balance = 1500M;
ba1.PrintAccountInfo();
//调用一个参数的构造方法,它会自动调用两个参数的构造方法来初始化
//BankAccount ba2 = new BankAccount("12312321321");
//ba2.PrintAccountInfo();
Console.ReadKey();
}
}
}
运行结果如下:
以上例子都说明了面向对象的的好处,操作过程简单明了