在 C# 中,有两种类型:值类型和引用类型。其中,值类型是将值存储在它们分配给的变量中,而引用类型是将一个对象引用存储在变量中。本文将以引用类型包括哪些为中心,从多个方面对它作详细的阐述。
一、引用类型包括哪些类型
C# 引用类型包含两大类:类 (class) 和 接口 (interface)。在对象实例化时,类通过引用来表示,而接口通过它们的实现类来引用。接口也可以被直接引用,并在调用类似方法的实现时之后进行实例化。除了类和接口之外,在 C# 中,还有一些特殊的引用类型:
- 委托 (delegate):这是存储对特定方法的引用的类型。当需要多个方法在其他作用域中调用时,委托是一个非常有用的工具。
- 数组 (array):数组是一个表示特定类型的值类型的连续集合。它们通过使用基础类型的单个引用实现。
- 枚举 (enum):枚举是一种值类型,它列出了一组命名整数值。
二、C# 引用类型有哪四种
C# 引用类型可以分为四种类型:
- 类 (class):类是由程序员定义的结构。它拥有一个名称、成员和方法。
- 接口 (interface):接口定义了一组功能,但没有它们的实现。它们通常由实现它们的类定义。
- 数组 (array):数组是一组元素的有序集合,每个元素都可以通过使用一个索引值来访问。
- 委托 (delegate):委托是指向一个或多个方法的引用。
三、C# 引用类型包括哪些
C# 引用类型包括类、接口、数组和委托以外的其他对象。 “其他” 引用类型不同于 .NET 中的基础类型。这些类型包括字符串、集合类和 LINQ 类。
四、引用类型有哪三种
在 C# 中,引用类型可分为三类:
- 包装器类型 (wrapper type):这些类型用于将值类型封装为对象,例如 System.Int32 和 System.Boolean。
- 对象类型 (object type):这些对象是 C# 中的标准引用类型。例如 Object 和 String。
- 动态类型 (dynamic type):这是一种弱类型,在编译时不确定类型,而是在运行时才确定。
五、引用类型有哪四种
除了前文提到的三种引用类型,C# 中还有一种称为 Nullable 的第四种引用类型。Nullable 类型允许变量拥有 null 值,而不是不确定的值。
六、代码示例
using System; using System.Collections.Generic; namespace ReferenceTypes { class Program { static void Main(string[] args) { // 类 Person person = new Person("John", "Doe"); Console.WriteLine(person.FullName()); // 接口 ITaxCalculator calculator = new TaxCalculator(); double tax = calculator.CalculateTax(50000); Console.WriteLine($"Tax: ${tax}"); // 数组 int[] numbers = { 1, 2, 3, 4, 5 }; Console.WriteLine($"Length: {numbers.Length}"); // 委托 Func<int, int, int> addFunc = (a, b) => a + b; Console.WriteLine($"Result: {addFunc(3, 4)}"); // 其他 string text = "Hello, World!"; Console.WriteLine(text.Length); List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 }; Console.WriteLine($"Count: {numbersList.Count}"); int[] numbersLinq = { 1, 2, 3, 4, 5 }; var linqQuery = from number in numbersLinq where number % 2 == 0 select number; Console.WriteLine(linqQuery.Count()); } } class Person { private string firstName; private string lastName; public Person(string firstName, string lastName) { this.firstName = firstName; this.lastName = lastName; } public string FullName() { return $"{firstName} {lastName}"; } } interface ITaxCalculator { double CalculateTax(double income); } class TaxCalculator : ITaxCalculator { private const double TaxRate = 0.1; public double CalculateTax(double income) { return income * TaxRate; } } }