封装
封装就是把数据(字段)和操作数据的方法(函数)包在一起,并控制外部怎么访问它们。
——————————————————————————————————————————————————————————————————————————
案例1:银行账户(保护余额)
csharp
class BankAccount
{
private double balance; // 私有字段,外部不能直接访问
public void Deposit(double amount)
{
if (amount > 0) balance += amount;
}
public double GetBalance()
{
return balance;
}
}
class Program
{
static void Main()
{
BankAccount acc = new BankAccount();
acc.Deposit(100);
Console.WriteLine(acc.GetBalance()); // 100
// acc.balance = 999; // 报错!私有的访问不到
}
}
余额只能通过Deposit方法修改,不能直接赋值,保证了数据安全。
——————————————————————————————————————————————————————————————————————————
案例2:年龄验证(防止非法数据)
csharp
class Person
{
private int age;
public void SetAge(int value)
{
if (value >= 0 && value <= 150)
age = value;
else
Console.WriteLine("年龄不合法!");
}
public int GetAge() { return age; }
}
class Program
{
static void Main()
{
Person p = new Person();
p.SetAge(25); // 合法
p.SetAge(-5); // 年龄不合法!
Console.WriteLine(p.GetAge()); // 25(没被改坏)
}
}
封装保证了年龄永远不会被设为负数或过大值。
——————————————————————————————————————————————————————————————————————————
案例3:属性简化版(C#特色写法)
csharp
class Student
{
private string name;
public string Name // 属性(封装的标准写法)
{
get { return name; }
set { name = string.IsNullOrEmpty(value) ? "无名" : value; }
}
}
class Program
{
static void Main()
{
Student s = new Student();
s.Name = ""; // 自动变成"无名"
Console.WriteLine(s.Name); // 无名
s.Name = "小明";
Console.WriteLine(s.Name); // 小明
}
}
通过属性(get/set)来控制赋值逻辑,外部看起来像直接操作字段,但内部有验证。

浙公网安备 33010602011771号