C# 封装(Encapsulation)
                           
天天向上
发布: 2025-04-13 13:15:37

原创
363 人浏览过

本章节会全面详细的讲解 C# 封装(Encapsulation) ,包含定义、原理、语法、示例、注意事项及拓展理解,并提供多途径实现与参考链接。


一、什么是封装(Encapsulation)

封装是面向对象编程(OOP)四大基本特性之一,其核心目的是:

✅ “将数据(字段)和操作数据的方法绑定在一起,并控制外部访问权限。”


二、封装的核心要素

要素描述
访问修饰符private, public, protected, internal,用于限制成员的可见性。
字段(Field)通常设置为 private,防止外部直接访问。
属性(Property)提供 getset 方法作为字段的访问接口,控制读写行为。
方法(Method)操作封装对象数据的行为,通常也设置访问权限。

三、封装语法实例

public class Person
{
    // 私有字段 - 封装的数据
    private string name;
    private int age;

    // 公共属性 - 对外暴露控制接口
    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public int Age
    {
        get 
        {
            return age; 
        }
        set 
        {
            if (value >= 0) 
                age = value;
        }
    }

    // 封装方法
    public void Introduce()
    {
        Console.WriteLine($"Hi, I'm {name}, {age} years old.");
    }
}

📌 外部只能通过 NameAge 属性访问数据,直接访问 name/age 字段会报错。


四、访问修饰符对比

修饰符当前类派生类同一程序集外部程序集
private
protected
internal
public
protected internal✅ (在派生类中)
private protected✅ (本程序集)

五、自动实现的属性(简写封装)

public class Student
{
    public string Name { get; set; } // 自动封装,无需手动定义字段
}

📌 推荐用于无逻辑处理的简单数据封装。


六、封装中的典型错误与误区

错误类型原因与建议
字段未私有化违反封装原则,应使用 private 限制直接访问
不加控制直接 set应在 set 中添加逻辑控制(如合法性校验)
将逻辑直接暴露给外部所有操作应封装在方法内部进行

七、进阶封装技巧

🔹 只读属性(封装只读)

public string Name { get; private set; }

外部只能 get,只能在构造函数或类内部 set


🔹 初始化器 + 只读字段封装

public class Config
{
    public string Version { get; } = "1.0";
}

🔹 通过方法访问私有字段(行为封装)

private int count;

public void Increment()
{
    count++;
}

public int GetCount()
{
    return count;
}

八、权威资料参考


九、封装 VS 其他 OOP 特性对比

特性描述
封装隐藏实现细节,暴露接口
继承子类重用父类逻辑
多态不同对象对同一接口产生不同响应
抽象定义统一接口,强制子类实现(如接口/抽象类)

十、实用场景举例

  • 业务逻辑验证set 时控制年龄不为负
  • 只读 ID 自动生成
  • 日志封装类中仅允许调用方法记录日志,不允许直接操作文件句柄

更多详细内容,清关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *