亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C# 封装详解:访问修饰符与面向对象设计最佳实践

封装被定义为"将一个或多个项封装在物理或逻辑包内的过程"。在面向对象编程方法论中,封装隐藏实现细节。

抽象和封装是面向对象编程的相关特性。抽象让相关信息可见,封装则让程序员能够实现所需的抽象级别。

封装通过访问修饰符实现。访问修饰符定义类成员的作用域和可见性。C# 支持以下访问修饰符:

Public 访问修饰符

Public 允许类将成员变量和成员函数暴露给其他函数和对象。任何公共成员均可从类外部访问。

示例

using System;
namespace RectangleApplication {
    class Rectangle {
        // 成员变量
        public double length;
        public double width;
        
        public double GetArea() {
            return length * width;
        }
        
        public void Display() {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }
    
    class ExecuteRectangle {
        static void Main(string[] args) {
            Rectangle r = new Rectangle();
            r.length = 4.5;
            r.width = 3.5;
            r.Display();
            Console.ReadLine();
        }
    }
}

输出:

Length: 4.5
Width: 3.5
Area: 15.75

示例中 length 和 width 声明为 public,可通过实例 r 在 Main() 中访问。成员函数 Display() 和 GetArea() 也可直接访问这些变量。

Private 访问修饰符

Private 允许类隐藏成员变量和成员函数,仅同一类内的函数可访问。即使是类的实例也不能访问其私有成员。

示例

using System;
namespace RectangleApplication {
    class Rectangle {
        private double length;
        private double width;
        
        public void Acceptdetails() {
            Console.WriteLine("Enter Length: ");
            length = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Enter Width: ");
            width = Convert.ToDouble(Console.ReadLine());
        }
        
        public double GetArea() {
            return length * width;
        }
        
        public void Display() {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }
    
    class ExecuteRectangle {
        static void Main(string[] args) {
            Rectangle r = new Rectangle();
            r.Acceptdetails();
            r.Display();
            Console.ReadLine();
        }
    }
}

输出示例:

Enter Length: 4.4
Enter Width: 3.3
Length: 4.4
Width: 3.3
Area: 14.52

私有字段 length、width 无法从 Main() 直接访问,只能通过公共方法 Acceptdetails() 和 Display() 间接操作。

Protected 访问修饰符

Protected 允许子类访问基类的成员变量和成员函数,用于实现继承。详见继承章节。

Internal 访问修饰符

Internal 允许类将成员暴露给当前程序集内的其他函数和对象。即:具有 internal 修饰符的成员可被定义在同一应用程序中的任何类或方法访问。

示例

using System;
namespace RectangleApplication {
    class Rectangle {
        internal double length;
        internal double width;
        
        double GetArea() {  // 无修饰符,默认 private
            return length * width;
        }
        
        public void Display() {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }
    
    class ExecuteRectangle {
        static void Main(string[] args) {
            Rectangle r = new Rectangle();
            r.length = 4.5;
            r.width = 3.5;
            r.Display();
            Console.ReadLine();
        }
    }
}

输出:

Length: 4.5
Width: 3.5
Area: 15.75

注意:GetArea() 未声明访问修饰符,类成员默认访问级别为 private。

Protected Internal 访问修饰符

Protected internal 允许类隐藏成员,除同一应用程序内的子类外。也用于实现继承。

访问修饰符对比表

修饰符同一类内同一程序集子类同一程序集非子类其他程序集子类其他程序集非子类
public✓✓✓✓✓
protected internal✓✓✓✓✗
internal✓✓✓✗✗
protected✓✓✗✓✗
private✓✗✗✗✗

C语言

  1. C# 类与对象:面向对象编程的基石
  2. 理解 C# 访问修饰符:public、private、protected、internal 等完全指南
  3. C# static 关键字:静态变量、方法与类完全掌握
  4. 掌握 C# 抽象类与抽象方法:实战指南
  5. 理解 C# 嵌套类:定义、访问与继承实战
  6. 理解 C# 分部类与分部方法
  7. 掌握 C# sealed 类与方法:用法、示例与代码安全性能提升
  8. C++多态实战指南:虚函数、动态绑定与纯虚函数
  9. C++数据抽象实战:接口与实现分离的设计艺术
  10. C++数据封装:守护代码安全的核心机制
  11. C# 程序结构解析:从 Hello World 看命名空间、类、Main 入口与编译运行
  12. Java 封装机制:数据隐藏、访问控制与不变量保护