C#类修饰符功能与范围详解

C#类修饰符功能与范围详解

在C#中,类的声明可以使用多种修饰符来控制其可见性、继承性和其他特性。以下是主要的类修饰符及其功能和范围限制:

1. 访问修饰符

public

  • 功能:无访问限制,任何代码都可以访问
  • 范围:同一程序集或其他程序集
csharp 复制代码
public class PublicClass
{
    // 可在任何地方访问
}

internal

  • 功能:只能在当前程序集内访问
  • 范围:同一程序集(默认访问级别)
csharp 复制代码
internal class InternalClass
{
    // 只能在当前程序集内访问
}

protected internal

  • 功能:当前程序集或派生类可访问
  • 范围:同一程序集或不同程序集中的派生类
csharp 复制代码
protected internal class ProtectedInternalClass
{
    // 当前程序集或派生类可访问
}

private protected (C# 7.2+)

  • 功能:当前程序集中的派生类可访问
  • 范围:同一程序集中的派生类
csharp 复制代码
private protected class PrivateProtectedClass
{
    // 仅同一程序集中的派生类可访问
}

2. 继承修饰符

abstract

  • 功能:抽象类,不能实例化,只能被继承
  • 限制:必须包含至少一个抽象成员
csharp 复制代码
public abstract class Animal
{
    public abstract void MakeSound();
    public void Sleep() { /* 实现 */ }
}

sealed

  • 功能:密封类,不能被继承
  • 限制:不能作为基类
csharp 复制代码
public sealed class String : ICloneable
{
    // 不能被继承
}

3. 静态修饰符

static

  • 功能:静态类,仅包含静态成员
  • 限制:不能实例化,不能继承或被继承
csharp 复制代码
public static class Math
{
    public static double PI = 3.14159;
    public static int Add(int a, int b) => a + b;
}

4. 部分类修饰符

partial

  • 功能:允许类定义分布在多个文件中
  • 限制:所有部分必须使用相同的访问修饰符
csharp 复制代码
// File1.cs
public partial class MyClass
{
    public void Method1() { }
}

// File2.cs
public partial class MyClass
{
    public void Method2() { }
}

5. 不安全代码修饰符

unsafe

  • 功能:允许在类中使用不安全代码(指针等)
  • 限制:需要启用不安全代码编译选项
csharp 复制代码
public unsafe class PointerExample
{
    public void Process(int* ptr)
    {
        *ptr = 10;
    }
}

修饰符组合规则

有效组合示例:

csharp 复制代码
public sealed class MySealedClass { }
internal abstract class MyAbstractClass { }
public static class UtilityClass { }
private protected partial class MyPartialClass { }

无效组合示例:

csharp 复制代码
static sealed class InvalidClass { } // static 隐含 sealed
abstract sealed class InvalidClass { } // 矛盾修饰符
private public class InvalidClass { } // 多个访问修饰符

嵌套类的访问修饰符

嵌套类可以使用所有访问修饰符,作用域相对于包含类:

csharp 复制代码
public class ContainerClass
{
    private class NestedPrivate { }        // 仅容器类可访问
    protected class NestedProtected { }    // 容器类及其派生类可访问
    internal class NestedInternal { }      // 同一程序集可访问
    public class NestedPublic { }          // 任何地方可访问
}

总结表格

修饰符 功能 范围限制 可否实例化 可否继承
public 公开访问 无限制
internal 内部访问 同一程序集
abstract 抽象类 无限制
sealed 密封类 无限制
static 静态类 无限制
partial 分部类 无限制

这些修饰符可以灵活组合使用,为C#类提供了丰富的访问控制和功能特性。

相关推荐
Scott9999HH5 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔5 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
EIP低代码平台6 小时前
EIP 低代码平台 - 角色维护
低代码·c#·权限·工作流·netcore
码智社6 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海6 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖7 小时前
JDK 26 新特性详解
java·开发语言
马优晨8 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区10 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大10 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai11 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang