C 中面向对象的技术概述#

在 C# 中,类型(类、结构或记录)的定义类似于指定类型可以执行的作的蓝图。 对象基本上是根据蓝图分配和配置的内存块。 本文概述了这些蓝图及其功能。 本系列中的下一篇文章介绍对象。

封装

封装 有时称为面向对象的编程的第一个支柱或原则。 类或结构可以指定每个成员对类或结构外部代码的可访问性。 不用于类或程序集外部使用者的成员被隐藏,以限制编码错误或恶意攻击的可能性。 有关详细信息,请参阅 面向对象的编程 教程。

成员

类型 的成员 包括所有方法、字段、常量、属性和事件。 在 C# 中,没有像在某些其他语言中那样的全局变量或方法。 即使是程序的入口点, Main 该方法也必须在类或结构中声明(在使用 顶级语句时隐式声明)。

以下列表包括可在类、结构或记录中声明的所有各种成员。

  • 领域
  • 常量
  • 性能
  • 方法
  • 构造函数
  • 事件
  • 终结器
  • 索引器
  • 运营商
  • 嵌套类型

有关详细信息,请参阅 成员

可及性

某些方法和属性旨在从类或结构之外的代码(称为 客户端代码)调用或访问。 其他方法和属性可能仅用于类或结构本身。 必须限制代码的可访问性,以便只有预期的客户端代码才能访问它。 可以使用以下访问修饰符指定类型及其成员对客户端代码的访问方式:

可访问性的默认值为 private

继承

类(但不支持结构)支持继承的概念。 派生自另一个类的类(称为 基类)自动包含基类的所有公共、受保护和内部成员,其构造函数和终结器除外。

类可以声明为 抽象类,这意味着其一个或多个方法没有实现。 尽管抽象类不能直接实例化,但它们可以作为提供缺失实现的其他类的基类。 类也可以声明为 密封 类,以防止其他类从它们继承。

有关详细信息,请参阅 继承多态性

接口

类、结构和记录可以实现多个接口。 若要从接口实现,则意味着该类型实现接口中定义的所有方法。 有关详细信息,请参阅 接口

泛型类型

可以使用一个或多个类型参数定义类、结构和记录。 客户端代码在创建类型的实例时提供该类型。 例如, List<T> 命名空间中的 System.Collections.Generic 类使用一个类型参数定义。 客户端代码创建一个List<string>List<int>的实例,以指定列表保存的类型。 有关详细信息,请参阅 泛型

静态类型

类(但不能将结构或记录)声明为 static。 静态类只能包含静态成员,不能使用 new 关键字实例化。 程序加载时,类的一个副本将加载到内存中,并通过类名访问其成员。 类、结构和记录可以包含静态成员。 有关详细信息,请参阅 静态类和静态类成员

嵌套类型

类、结构或记录可以嵌套在另一个类、结构或记录中。 有关详细信息,请参阅 嵌套类型

分部类型

可以在一个代码文件中定义类、结构或方法的一部分,也可以在单独的代码文件中定义另一个部分。 有关详细信息,请参阅 分部类和方法

对象初始值设定项

可以通过为其属性分配值来实例化和初始化类或结构对象以及对象的集合。 有关详细信息,请参阅如何使用对象初始值设定项初始化对象

匿名类型

在不方便或没有必要创建命名类的情况下,可以使用匿名类型。 命名数据成员定义匿名类型。 有关详细信息,请参阅 匿名类型

扩展成员

可以通过创建单独的类型来“扩展”类,而无需创建派生类。 该类型包含可以像属于原始类型一样调用的方法。 有关详细信息,请参阅 扩展方法

隐式类型化局部变量

在类或结构方法中,可以使用隐式键入来指示编译器在编译时确定变量的类型。 有关详细信息,请参阅 var (C# 参考)。

记录

可以将修饰符添加到 record 类或结构。 记录是具有基于值的相等性的内置行为的类型。 记录(record classrecord struct之一)提供以下功能:

  • 用于创建具有不可变属性的引用类型的简明语法。
  • 重视平等。 如果记录类型具有相同类型,则两个记录类型的变量相等,如果对于每个字段,这两个记录中的值都是相等的。 类使用引用相等性:如果类类型的两个变量引用同一对象,则它们相等。
  • 非破坏性突变的简洁语法。 表达式 with 允许你创建一个新的记录实例,该实例是现有实例的副本,但具有指定的属性值已更改。
  • 显示的内置格式设置。 该方法 ToString 输出记录类型名称和公共属性的名称和值。
  • 支持记录类中的继承层次结构。 记录类支持继承。 记录结构不支持继承。

有关详细信息,请参阅记录

C# 语言规范

有关详细信息,请参阅 C# 语言规范。 语言规范是 C# 语法和用法的明确来源。