C#中的类型系统统一意味着C#中的所有数据类型都直接或间接地从Object类继承。或者您可以说所有类型都被视为对象。在C#中,基本类型被称为值类型,它基本上是结构。在内部,结构和类继承对象类。这就是为什么将所有类型都间接地视为对象的原因,而该术语称为T ype System Unification 。
示例:所有预定义类型(如short,int long等)都是结构。以下是预定义的类型及其结构等效项:
Predefined Type | Equivalent Struct |
---|---|
short | System.Int16 |
int | System.Int32 |
long | System.Int64 |
ushort | System.UInt16 |
uint | System.UInt32 |
ulong | System.Int64 |
byte | System.Byte |
sbyte | System.SByte |
bool | System.Boolean |
char | System.Char |
Float | System.Single |
Double | System.Double |
Decimal | System.Decimal |
示例:在下面的程序中,由于类型系统与方法ToString()返回一个表示该特定对象的字符串的类型统一,因此将值数据类型(如int,char,bool)用作对象。
// C# implementation of Type
// System Unification
using System;
class GFG {
// Main Method
public static void Main(string[] args)
{
// Value data types
int i = 1;
char c = 'A';
bool b = true;
Console.WriteLine(i.ToString());
Console.WriteLine(c.ToString());
Console.WriteLine(b.ToString());
}
}
1
A
True
装箱与拆箱
类型系统统一启用装箱和拆箱,因为任何值数据类型都可以视为对象。因此,将诸如int,char,bool等的值数据类型转换为对象类型时,称为装箱。相反,将对象类型转换回数据类型时,称为拆箱。
装箱:将数值数据类型(例如int,char,bool等)在装箱中隐式转换为对象类型。首先,分配一个对象类型,然后将value数据类型中的值复制到该对象类型中。
例子:
// C# implementation of Boxing
using System;
class GFG {
// Main Method
static public void Main()
{
// int value data type
int val = 8;
// boxing
object obj = val;
System.Console.WriteLine("val = {0}", val);
System.Console.WriteLine("obj = {0}", obj);
}
}
val = 8
obj = 8
拆箱:在拆箱中将对象类型显式转换为值数据类型,例如int,char,bool等。首先,检查对象类型是否为值数据类型的装箱值。如果是,则将对象类型中的值复制出来。
例子:
// C# implementation of Unboxing
using System;
class GFG {
// Main Method
static public void Main()
{
// int value data type
int val1 = 8;
// boxing
object obj = val1;
// unboxing
int val2 = (int)obj;
Console.WriteLine("val1 = " + val1);
Console.WriteLine("obj = " + obj);
Console.WriteLine("val2 = " + val2);
}
}
val1 = 8
obj = 8
val2 = 8
类型系统统一的好处:类型系统统一非常有用,因为它提供了表现为值数据类型或对象类型的数据类型的双重好处。由于类型系统统一的固有特性,可以在需要时使用值数据类型,并且可以根据需要使用装箱将其转换为对象类型。