📜  C#.NET中的类型系统统一

📅  最后修改于: 2021-05-29 16:29:41             🧑  作者: Mango

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

类型系统统一的好处:类型系统统一非常有用,因为它提供了表现为值数据类型或对象类型的数据类型的双重好处。由于类型系统统一的固有特性,可以在需要时使用值数据类型,并且可以根据需要使用装箱将其转换为对象类型。