【C#基础知识 7】2. 基本语法 -- 2.6 访问修饰符

C#基础知识 2:基本语法

2.6 访问修饰符

访问修饰符 用于控制类、方法、属性和其他成员的可见性和访问权限。C# 提供了几种访问修饰符,包括 publicprivateprotectedinternal 和 protected internal。以下是访问修饰符的详细讲解,包括其优点、缺点以及代码示例。

2.6.1 访问修饰符的基本概念

访问修饰符决定了其他代码可以访问类、方法、属性等成员的程度。C# 提供以下访问修饰符:

  • public:成员对所有代码都可见。
  • private:成员仅对定义它的类可见。
  • protected:成员对定义它的类及其派生类可见。
  • internal:成员对定义它的程序集可见。
  • protected internal:成员对定义它的程序集及其派生类可见。

示例:


csharp

public class Person
{
    public string Name { get; set; } // 公共属性
    private int age; // 私有字段
    protected string Address { get; set; } // 受保护属性
    internal string Email { get; set; } // 内部属性
    protected internal string PhoneNumber { get; set; } // 受保护内部属性
}
2.6.2 访问修饰符的声明和使用

访问修饰符声明 在成员声明前添加访问修饰符。

示例:


csharp

public class Person
{
    public string Name { get; set; } // 公共属性
    private int age; // 私有字段
    protected string Address { get; set; } // 受保护属性
    internal string Email { get; set; } // 内部属性
    protected internal string PhoneNumber { get; set; } // 受保护内部属性
}

访问修饰符使用 根据访问修饰符的权限,控制成员的访问。

示例:


csharp

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();
        person.Name = "Alice"; // 可以访问公共属性
        // person.age = 30; // 错误:无法访问私有字段
        // person.Address = "123 Main St"; // 错误:无法访问受保护属性
        person.Email = "alice@example.com"; // 可以访问内部属性
        person.PhoneNumber = "123-456-7890"; // 可以访问受保护内部属性
    }
}
2.6.3 访问修饰符的优点
  1. 封装

    • 通过访问修饰符,可以控制对类成员的访问,提高数据的安全性。
    • 避免外部代码直接修改类的内部状态。
  2. 代码重用

    • 访问修饰符允许在不同类和程序集之间共享代码,提高代码的可重用性。
    • 通过 internal 和 protected internal,可以在同一程序集或派生类中重用代码。
  3. 模块化

    • 访问修饰符帮助将代码分解为模块,便于管理和维护。
    • 每个模块可以独立开发和测试。
  4. 提高可读性

    • 通过访问修饰符,可以清晰地表示类成员的可见性和用途。
    • 代码更易于理解和阅读。
  5. 多态性

    • 通过 protected 和 protected internal,可以在派生类中扩展和重用现有类的功能。
    • 提高代码的灵活性和可扩展性。
2.6.4 访问修饰符的缺点
  1. 复杂性增加

    • 对于小型项目,使用访问修饰符可能会增加不必要的复杂性。
    • 需要额外的时间来设计和管理访问权限。
  2. 学习曲线

    • 对于初学者,理解访问修饰符的概念和使用方法可能需要一些时间。
  3. 性能开销

    • 访问修饰符的检查可能会带来一定的性能开销,尤其是在性能敏感的应用中。
  4. 内存消耗

    • 访问修饰符的管理可能会占用一定的内存,可能导致内存消耗增加。
2.6.5 访问修饰符的代码示例

以下是一些详细的代码示例,展示了如何声明和使用访问修饰符。

示例1:公共访问修饰符

文件1:Person.cs


csharp

public class Person
{
    public string Name { get; set; } // 公共属性
}

文件2:Program.cs


csharp

using System;

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();
        person.Name = "Alice"; // 可以访问公共属性
        Console.WriteLine($"Name: {person.Name}");
    }
}
示例2:私有访问修饰符

文件1:Person.cs


csharp

public class Person
{
    private string name; // 私有字段

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

文件2:Program.cs


csharp

using System;

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();
        person.Name = "Bob"; // 可以通过公共属性访问私有字段
        Console.WriteLine($"Name: {person.Name}");

        // person.name = "Charlie"; // 错误:无法访问私有字段
    }
}
示例3:受保护访问修饰符

文件1:Person.cs


csharp

public class Person
{
    protected string Address { get; set; } // 受保护属性
}

文件2:Employee.cs


csharp

public class Employee : Person
{
    public void SetAddress(string address)
    {
        Address = address; // 可以在派生类中访问受保护属性
    }

    public string GetAddress()
    {
        return Address; // 可以在派生类中访问受保护属性
    }
}

文件3:Program.cs


csharp

using System;

class Program
{
    static void Main(string[] args)
    {
        Employee employee = new Employee();
        employee.SetAddress("123 Main St");
        Console.WriteLine($"Address: {employee.GetAddress()}");

        // employee.Address = "456 Elm St"; // 错误:无法在非派生类中访问受保护属性
    }
}
示例4:内部访问修饰符

文件1:Person.cs


csharp

internal class Person
{
    internal string Email { get; set; } // 内部属性
}

文件2:Program.cs


csharp

using System;

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();
        person.Email = "alice@example.com"; // 可以在同一个程序集中访问内部属性
        Console.WriteLine($"Email: {person.Email}");
    }
}
示例5:受保护内部访问修饰符

文件1:Person.cs


csharp

public class Person
{
    protected internal string PhoneNumber { get; set; } // 受保护内部属性
}

文件2:Employee.cs


csharp

public class Employee : Person
{
    public void SetPhoneNumber(string phoneNumber)
    {
        PhoneNumber = phoneNumber; // 可以在派生类中访问受保护内部属性
    }

    public string GetPhoneNumber()
    {
        return PhoneNumber; // 可以在派生类中访问受保护内部属性
    }
}

文件3:Program.cs


csharp

using System;

class Program
{
    static void Main(string[] args)
    {
        Employee employee = new Employee();
        employee.SetPhoneNumber("123-456-7890");
        Console.WriteLine($"Phone Number: {employee.GetPhoneNumber()}");

        // employee.PhoneNumber = "987-654-3210"; // 错误:无法在非派生类中访问受保护内部属性
    }
}

通过以上详细讲解和代码示例,您可以更好地理解和使用C#中的访问修饰符。访问修饰符是控制类成员可见性和访问权限的重要工具,有助于提高代码的安全性、可重用性和可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路飞VS草帽

感谢支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值