一篇文章搞懂C# 访问修饰符
1.1.1. 什么是访问修饰符?
访问修饰符(Access Modifiers)是用于控制类及其成员(如字段、方法、属性等)访问权限的关键字。通过使用访问修饰符,可以定义哪些代码可以访问类或类成员,从而实现封装和信息隐藏。
1.1.2. C# 中有哪些访问修饰符
C# 提供了以下几种访问修饰符:
(1) public:公开访问,不受限制。
(2) private:私有访问,只有同一个类内部可以访问。
(3) protected:受保护访问,只有同一个类或派生类内部可以访问。
(4) internal:内部访问,只有同一个程序集内的代码可以访问。
(5) protected internal:受保护的内部访问,只有同一个程序集内的代码或派生类可以访问。
(6) private protected:私有的受保护访问,只有同一个类内部或同一个程序集内的派生类可以访问。
访问修饰符详解表格
访问修饰符 | 访问范围 | 适用场景 |
public | 无限制,任何地方都可以访问。 | 当需要类或成员对所有代码都可见时使用。 |
private | 仅限同一个类内部访问。 | 当需要隐藏类成员,防止外部代码直接访问时使用。 |
protected | 仅限同一个类或派生类内部访问。 | 当需要在类和其派生类之间共享成员时使用。 |
internal | 仅限同一个程序集内部访问。 | 当需要在同一个程序集内共享类或成员,但不希望被其他程序集访问时使用。 |
protected internal | 仅限同一个程序集内的代码或派生类访问。 | 当需要在同一个程序集内或跨程序集的派生类之间共享成员时使用。 |
private protected | 仅限同一个类内部或同一个程序集内的派生类访问。 | 当需要在同一个类和同一个程序集内的派生类之间共享成员,但不希望其他程序集访问时使用。 |
1.1.3. 访问修饰符详解
1.1.3.1. public
public 访问修饰符允许类或成员对所有代码可见,无论是同一个程序集还是不同程序集。使用 public 修饰符,可以实现最开放的访问权限。
public class MyClass
{
public int MyField;
public void MyMethod()
{
// 公开的方法
}
}
1.1.3.2. private
private 访问修饰符限制类或成员的访问权限,只允许在同一个类内部访问。使用 private 修饰符,可以隐藏类成员,防止外部代码直接访问。
public class MyClass
{
private int MyField;
?
private void MyMethod()
{
// 私有的方法
}
}
1.1.3.3. protected
protected 访问修饰符允许类或成员在同一个类或派生类内部访问。使用 protected 修饰符,可以在类和其派生类之间共享成员。
public class BaseClass
{
protected int MyField;
?
protected void MyMethod()
{
// 受保护的方法
}
}
?
public class DerivedClass : BaseClass
{
public void AccessProtectedMembers()
{
MyField = 10; // 访问基类的受保护成员
MyMethod(); // 调用基类的受保护方法
}
}
1.1.3.4. internal
internal 访问修饰符允许类或成员在同一个程序集内部访问。使用 internal 修饰符,可以在同一个程序集内共享类或成员,但不希望被其他程序集访问。
internal class MyClass
{
internal int MyField;
?
internal void MyMethod()
{
// 内部的方法
}
}
1.1.3.5. protected internal
protected internal 访问修饰符允许类或成员在同一个程序集内的代码或派生类访问。使用 protected internal 修饰符,可以在同一个程序集内或跨程序集的派生类之间共享成员。
public class BaseClass
{
protected internal int MyField;
?
protected internal void MyMethod()
{
// 受保护的内部方法
}
}
?
public class DerivedClass : BaseClass
{
public void AccessProtectedInternalMembers()
{
MyField = 10; // 访问基类的受保护的内部成员
MyMethod(); // 调用基类的受保护的内部方法
}
}
1.1.3.6. private protected
private protected 访问修饰符允许类或成员在同一个类内部或同一个程序集内的派生类访问。使用 private protected 修饰符,可以在同一个类和同一个程序集内的派生类之间共享成员,但不希望其他程序集访问。
public class BaseClass
{
private protected int MyField;
?
private protected void MyMethod()
{
// 私有的受保护方法
}
}
?
public class DerivedClass : BaseClass
{
public void AccessPrivateProtectedMembers()
{
MyField = 10; // 访问基类的私有的受保护成员
MyMethod(); // 调用基类的私有的受保护方法
}
}
1.1.4. 总结
通过合理使用访问修饰符,可以有效地控制类及其成员的访问权限,增强代码的封装性和安全性。根据需要选择合适的访问修饰符,既可以保护内部实现细节,又可以提供必要的接口供外部使用。