C#实现了丰富的面向对象范式,包括封装、继承和多态。封装指在对象周围创建一个边界,将外部(公有)行为与内部(私有)实现细节隔离开来。C#面向对象特性包括:
统一的类型系统
C#中的基础构件是一种称为类型的数据与函数的封装单元。C#拥有统一的类型系统,其中的所有类型都共享一个公共的基类。因此所有类型,不论它们是表示业务对象还是表示数字这样的基元类型,都拥有相同的基本功能。例如,任何类型的实例都可以通过调用 ToString 方法将自身转换为一个字符串。
类与接口
在传统面向对象范式中,唯一的类型就是类。然而C#还有其他几种类型,其中之一是接口(interface)。接口与类相似,但它无法持有数据。因此它仅可用于定义行为(而非状态)。这样接口不但可以实现多重继承,还可以将标准与实现隔离。
属性、方法和事件
在纯粹的面向对象范式中,所有的函数都是方法。而在C#中,方法只是函数成员之一,除此之外还有属性(property)、事件及其他的形式。属性是封装了一部分对象状态的函数成员,例如,按钮的颜色或者标签的文本。事件则是简化对象状态变化处理的函数成员。
虽然C#首先是一种面向对象的语言,但它也借鉴了函数式编程的范式。例如:
可以将函数作为值看待
C#使用委托(delegate)将函数作为值传递给其他函数或者从其他函数中返回。
C#支持纯函数模式
函数式编程的核心是避免使用值可以变化的变量,或称为声明式模式。C#拥有支持该模式的若干关键功能,包括可以捕获变量的匿名函数(Lambda表达式),通过查询表达式(query expression)执行列表查询或响应式编程。C#还提供了记录(record)语法,使用它可以更加方便地编写不可变(immutable)类型。