📜  C#|封装形式(1)

📅  最后修改于: 2023-12-03 14:40:30.357000             🧑  作者: Mango

C# | 封装形式

封装是面向对象编程的三大特性之一,其目的是保护数据,并隐藏数据的实现细节,同时提供特定的访问接口。在C#中,封装主要通过访问修饰符来实现,包括public、private、protected和internal。

访问修饰符
public

public是最常用的访问修饰符,表示对外公开的接口,可以在任何地方访问。例如:

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

在上面的代码中,Name和Age是public的,可以在该类的任何实例中访问。

private

private是最严格的访问修饰符,表示只能在当前类中访问,类外部无法访问。例如:

public class Person
{
    private string Name { get; set; }
    private int Age { get; set; }

    public void SetName(string name)
    {
        Name = name;
    }

    public void SetAge(int age)
    {
        Age = age;
    }
}

在上面的代码中,Name和Age是private的,只能在Person类中使用。如果想要对Name和Age进行赋值或者获取,需要使用SetName和SetAge方法。

protected

protected表示只能在当前类或该类的子类中访问。例如:

public class Person
{
    protected string Name { get; set; }
    protected int Age { get; set; }
}

public class Employee : Person
{
    public void ModifyName()
    {
        Name = "New Name";
    }
}

在上面的代码中,Employee类继承了Person类,所以可以在Employee类中访问Person类的protected成员,但是在其他类中无法访问。

internal

internal表示只能在当前程序集中访问。例如:

internal class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Employee
{
    public void SetPersonName(Person person, string name)
    {
        person.Name = name;
    }
}

在上面的代码中,Person类是internal的,只能在当前程序集中访问。在Employee类中,可以通过SetPersonName方法访问Person类中的Name属性。

封装示例
public class Person
{
    private string _name;
    private int _age;

    public Person(string name, int age)
    {
        _name = name;
        _age = age;
    }

    public string GetName()
    {
        return _name;
    }

    public void SetName(string name)
    {
        _name = name;
    }

    public int GetAge()
    {
        return _age;
    }

    public void SetAge(int age)
    {
        _age = age;
    }
}

在上面的代码中,Person类中的_name和_age是private的,只能通过GetName和GetAge方法获取。SetName和SetAge方法可以用于设置_name和_age的值。这种封装方式可以保护_name和_age,同时提供了对外的访问接口。