C#是一种类型安全(type-safe)的语言。即类型的实例只能通过它们定义的协议进行交互。这确保了每种类型的内部一致性。例如,C#不允许将字符串类型作为整数类型进行处理。
更具体地说,C#是静态类型化(static typing)语言,它在编译时会执行类型安全性检查。当然,在运行时也会同样执行类型安全性检查。
静态类型化能够在程序运行之前消除大量错误。它将大量在运行时单元执行的测试转移到编译器中,确保程序中所有类型之间都是相互适配的,从而使大型程序更易于管理、更具预测性并更加健壮。此外,静态类型化可以借助一些工具,例如Visual Studio的IntelliSense来提供更好的编程辅助。它们能够知晓某个特定变量的类型,自然也知道该变量上能够调用的方法。同时这些工具还可以明确程序中的变量、类型或方法的所有使用位置,以便可靠地执行重构操作。
C#允许部分代码通过 dynamic 关键字来动态定义指定类型。然而,C#在大多数情况下仍然是一门静态类型化语言。
C#还是一门强类型语言(strongly typed language),因为它拥有非常严格的类型规则(不论是静态还是运行时均是如此)。例如,不能将浮点类型的参数在调用时传递到接受整数类型参数的函数中,而必须显式将这个浮点数转换为整数。这可以防止编码错误。