C#类修饰符功能与范围详解
C#类修饰符功能与范围详解
- 1. 访问修饰符
- public
- internal
- protected internal
- private protected (C# 7.2+)
- 2. 继承修饰符
- abstract
- sealed
- 3. 静态修饰符
- static
- 4. 部分类修饰符
- partial
- 5. 不安全代码修饰符
- unsafe
- 修饰符组合规则
- 有效组合示例:
- 无效组合示例:
- 嵌套类的访问修饰符
- 总结表格
在C#中,类的声明可以使用多种修饰符来控制其可见性、继承性和其他特性。以下是主要的类修饰符及其功能和范围限制:
1. 访问修饰符
public
- 功能:无访问限制,任何代码都可以访问
- 范围:同一程序集或其他程序集
public class PublicClass
{// 可在任何地方访问
}
internal
- 功能:只能在当前程序集内访问
- 范围:同一程序集(默认访问级别)
internal class InternalClass
{// 只能在当前程序集内访问
}
protected internal
- 功能:当前程序集或派生类可访问
- 范围:同一程序集或不同程序集中的派生类
protected internal class ProtectedInternalClass
{// 当前程序集或派生类可访问
}
private protected (C# 7.2+)
- 功能:当前程序集中的派生类可访问
- 范围:同一程序集中的派生类
private protected class PrivateProtectedClass
{// 仅同一程序集中的派生类可访问
}
2. 继承修饰符
abstract
- 功能:抽象类,不能实例化,只能被继承
- 限制:必须包含至少一个抽象成员
public abstract class Animal
{public abstract void MakeSound();public void Sleep() { /* 实现 */ }
}
sealed
- 功能:密封类,不能被继承
- 限制:不能作为基类
public sealed class String : ICloneable
{// 不能被继承
}
3. 静态修饰符
static
- 功能:静态类,仅包含静态成员
- 限制:不能实例化,不能继承或被继承
public static class Math
{public static double PI = 3.14159;public static int Add(int a, int b) => a + b;
}
4. 部分类修饰符
partial
- 功能:允许类定义分布在多个文件中
- 限制:所有部分必须使用相同的访问修饰符
// File1.cs
public partial class MyClass
{public void Method1() { }
}// File2.cs
public partial class MyClass
{public void Method2() { }
}
5. 不安全代码修饰符
unsafe
- 功能:允许在类中使用不安全代码(指针等)
- 限制:需要启用不安全代码编译选项
public unsafe class PointerExample
{public void Process(int* ptr){*ptr = 10;}
}
修饰符组合规则
有效组合示例:
public sealed class MySealedClass { }
internal abstract class MyAbstractClass { }
public static class UtilityClass { }
private protected partial class MyPartialClass { }
无效组合示例:
static sealed class InvalidClass { } // static 隐含 sealed
abstract sealed class InvalidClass { } // 矛盾修饰符
private public class InvalidClass { } // 多个访问修饰符
嵌套类的访问修饰符
嵌套类可以使用所有访问修饰符,作用域相对于包含类:
public class ContainerClass
{private class NestedPrivate { } // 仅容器类可访问protected class NestedProtected { } // 容器类及其派生类可访问internal class NestedInternal { } // 同一程序集可访问public class NestedPublic { } // 任何地方可访问
}
总结表格
| 修饰符 | 功能 | 范围限制 | 可否实例化 | 可否继承 |
|---|---|---|---|---|
| public | 公开访问 | 无限制 | 是 | 是 |
| internal | 内部访问 | 同一程序集 | 是 | 是 |
| abstract | 抽象类 | 无限制 | 否 | 是 |
| sealed | 密封类 | 无限制 | 是 | 否 |
| static | 静态类 | 无限制 | 否 | 否 |
| partial | 分部类 | 无限制 | 是 | 是 |
这些修饰符可以灵活组合使用,为C#类提供了丰富的访问控制和功能特性。
