C#基础学习之封装
封装是面向对象编程三大特性之一,也是面向对象的基本概念之一。封装就是将数据和行为(方法)包装在类里面,隐藏内部实现的细节,使得外界代码无法直接访问和修改对象内部的数据,只能通过对象的公共方法来访问和修改对象的状态。封装可以提高代码的安全性和可维护性,提高代码的复用性和可扩展性。
封装的三要素
- 访问修饰符:public、private、protected、internal、protected internal
- 属性(get、set):控制对象的状态和访问权限
- 方法(public、private、protected、virtual、abstract):完成某些特定功能,控制对象的行为
封装的特点
- 隐藏了对象的内部实现,只对外公开了指定的方法和属性,保护了对象的安全性和可靠性
- 封装是基于一个类进行的,从而实现了代码的复用。同一个类的不同对象对其属性方法的使用都是一样的,具有一般性
- 封装增强了灵活性,使得代码易于受控,便于模块化
封装示例1
class Person {
private string name;
private int age;
// 属性 (get/set)
public string Name {
get { return name; }
set { name = value; }
}
public int Age {
get { return age; }
set { age = value; }
}
// 公共方法
public void SayHi() {
Console.WriteLine("Hi! My name is " + name + ", I'm " + age + " years old.");
}
}
在上面的示例代码中,我们定义了一个Person类,包括属性Name和Age,以及方法SayHi,这里Name和Age都是私有字段,通过公共属性来控制它们的访问权限。在SayHi方法中,我们可以通过this关键字来访问当前对象的属性,实现了对对象状态的访问。
封装示例2
class BankAccount {
private string accountNo;
private decimal balance;
// 属性 (get/set)
public string AccountNo {
get { return accountNo; }
}
protected decimal Balance {
get { return balance; }
set { balance = value; }
}
// 方法
public void Deposit(decimal amount) {
Balance += amount;
}
public bool Withdraw(decimal amount) {
if (Balance >= amount) {
Balance -= amount;
return true;
}
return false;
}
}
class SavingsAccount : BankAccount {
public decimal CalculateInterest() {
decimal interest = 0.01m * Balance;
Deposit(interest);
return interest;
}
}
在上面的示例代码中,我们定义了一个BankAccount类,包括属性AccountNo和Balance,以及方法Deposit和Withdraw,这里AccountNo和Balance都是私有字段,通过公共属性来控制它们的访问权限。在Deposit和Withdraw方法中,我们可以通过Balance属性来访问对象状态,并通过set方法来修改对象状态。
另外,在SavingsAccount类中,我们继承了BankAccount类,并新增了一个CalculateInterest方法,通过Balance属性来计算利息,并通过Deposit方法将利息存入该账户。在这个过程中,Balance属性被BankAccount和SavingsAccount类各自控制,外界无法直接访问或修改其值,从而实现了对对象状态的封装。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#基础学习之封装 - Python技术站