C#中的封装、访问修饰符与属性

心灵画师 2019-04-15 ⋅ 27 阅读

封装(Encapsulation)是面向对象编程(OOP)中的一个重要概念,它指的是将对象的状态和行为封装在一个单独的实体中,并通过公开的接口来访问和操作它们。在C#中,我们通过访问修饰符和属性来实现封装。

访问修饰符

在C#中,有五个访问修饰符可以用于控制类、字段、方法和属性的访问权限。它们分别是:

  • public:可以在任何地方访问。没有访问限制。
  • private:只能在当前类中访问。最严格的访问级别。
  • protected:可以在当前类及其子类中访问。
  • internal:可以在当前程序集(assembly)中访问。在不同程序集中的代码无法访问。
  • protected internal:可以在当前程序集及其子类中访问。相当于protectedinternal的组合。

以下是一个示例,演示了访问修饰符的使用:

public class MyClass
{
    private int privateField;
    public int publicField;
    protected int protectedField;
    internal int internalField;
    protected internal int protectedInternalField;
    
    private void PrivateMethod() { }
    public void PublicMethod() { }
    protected void ProtectedMethod() { }
    internal void InternalMethod() { }
    protected internal void ProtectedInternalMethod() { }
}

属性

属性(Property)是一种特殊的方法,它提供了对类成员的访问和修改的方式。属性通常是与特定字段关联,并以字段的形式存储数据。属性的访问修饰符可以控制对属性的访问权限。以下是一个简单的示例:

public class Person
{
    private string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}

在上述示例中,Name属性与name字段关联。通过getset关键字,我们可以在外部访问和修改Name属性的值。例如:

Person person = new Person();
person.Name = "John"; // 设置属性的值
Console.WriteLine(person.Name); // 获取属性的值

上述代码中,我们使用属性来设置和获取Person对象的Name属性。

C#还提供了自动实现属性(Auto-implemented Properties),可以让我们更加简洁地定义属性。例如:

public class Person
{
    public string Name { get; set; }
}

在上述示例中,我们省略了与属性关联的私有字段,编译器会自动生成一个私有字段来存储属性的值。我们可以像使用普通属性一样使用自动实现属性。

总结

通过封装,我们可以隐藏类的内部细节,并只允许通过公开的接口访问和操作对象。访问修饰符可以帮助我们控制对类的成员的访问权限。属性则提供了一种定义和访问类成员的便捷方式。在C#中,掌握封装、访问修饰符和属性的概念和使用方法是编写高质量、可维护代码的关键。


全部评论: 0

    我有话说: