跳转至

封装与访问修饰符#

来源D:\study\C#1\WinForm\stu0812\stu0813\调用私有变量

WinForm 项目里大量使用类封装数据(Student、Book、User 等),本节复习面向对象的封装:用访问修饰符控制外部能否访问。


1. 访问修饰符对比#

修饰符 可访问范围
public 所有类都可以访问
private 只有本类内部可以访问
internal 同一程序集(项目)内可访问
protected 本类及子类可以访问
internal class Class1
{
    private int i = 66;          // 私有:外部无法直接访问
    private string name = "小明";

    // public:外部可以访问
    public int GetI() { return i; }
}

2. 为什么用 private 封装字段#

// ❌ 外部可以直接改,数据不受控制
public int Age;

// ✅ 封装:外部只能通过方法/属性访问,可以加校验
private int age;

public int Age
{
    get { return age; }
    set
    {
        if (value >= 0 && value <= 150)   // 校验
            age = value;
    }
}

💡 属性(Property)是 C# 封装的标准写法:get 读取、set 赋值。value 是赋值时的传入值。

3. 属性简写(自动属性)#

// 自动属性:编译器自动生成私有字段
public string Name { get; set; }        // 可读写
public string Account { get; set; }
public string Password { get; set; }

// 只读属性
public int Count { get; private set; }  // 外部不能直接赋值

// 计算属性(get 里写逻辑)
public TimeSpan TotalTime
{
    get { return EndTime - StartTime; }   // 没有 set,只读计算
}

💡 WinForm 项目中,数据模型类(Student、Book、User)几乎全用自动属性,就是 { get; set; }

4. 数据模型类实战(登录注册用户)#

public class User
{
    public string Username { get; set; }   // 姓名
    public string Account { get; set; }    // 账号
    public string Password { get; set; }   // 密码
}

// 使用
User user = new User();
user.Username = "张三";
user.Account = "zhangsan";
user.Password = "123456";

5. 封装的意义#

好处 说明
数据安全 外部不能随意改,可加校验
方便维护 改内部实现不影响外部调用
隐藏细节 只暴露需要的方法/属性

完整封装实战见 08-面向对象与设计模式/03-登录注册系统实战(User 类的使用)。


相关笔记#