📜  C#|资料类型

📅  最后修改于: 2021-05-29 18:14:45             🧑  作者: Mango

数据类型指定有效的C#变量可以保存的数据类型。 C#是一种强类型化的编程语言,因为在C#中,每种类型的数据(例如整数,字符,浮点数等)都已预先定义为编程语言的一部分,并且必须使用以下方式描述为给定程序定义的所有常量或变量:数据类型之一。

C#中的数据类型主要分为三类

  • 值数据类型
  • 参考数据类型
  • 指针数据类型
  1. 值数据类型:在C#中,值数据类型将直接将变量值存储在内存中,并且还将接受带符号和无符号字面量。这些数据类型的派生类为System.ValueType 。以下是C#编程语言中的不同值数据类型
    • 有符号和无符号整数类型:有8种整数类型,以有符号或无符号形式提供对8位,16位,32位和64位值的支持。

      Alias Type Name Type Size(bits) Range Default Value
      sbyte System.Sbyte signed integer 8 -128 to 127 0
      short System.Int16 signed integer 16 -32768 to 32767 0
      Int System.Int32 signed integer 32 -231 to 231-1 0 long System.Int64 signed integer 64 -263 to 263-1 0L
      byte System.byte unsigned integer 8 0 to 255 0 ushort System.UInt16 unsigned integer 16 0 to 65535 0
      uint System.UInt32 unsigned integer 32 0 to 232 0 ulong System.UInt64 unsigned integer 64 0 to 263 0
    • 浮点类型:有2种浮点数据类型,其中包含小数点。

      • Float32位单精度浮点类型。它具有7位数的精度。要初始化float变量,请使用后缀f或F。例如,float x = 3.5F;。如果后缀F或f不使用,则将其视为double。
      • Double :这是64位双精度浮点类型。它具有14到15位的精度。要初始化双精度型变量,请使用后缀d或D。但是,由于使用默认值,因此浮点数据类型是双精度型,并非必须使用后缀。
      Alias Type name Size(bits) Range (aprox) Default Value
      float System.Single 32 ±1.5 × 10-45 to ±3.4 × 1038 0.0F
      double System.Double 64 ±5.0 × 10-324 to ±1.7 × 10308 0.0D
    • 小数类型:小数类型是适用于财务和货币计算的128位数据类型。它具有28-29位数的精度。要初始化十进制变量,请使用后缀m或M。就像十进制x = 300.5m;。如果后缀m或M不使用,则将其视为double。
      Alias Type name Size(bits) Range (aprox) Default value
      decimal System.Decimal 128 ±1.0 × 10-28 to ±7.9228 × 1028 0.0M
    • 字符类型:字符类型代表UTF-16代码单元或代表16位Unicode字符。
      Alias Type name Size In(Bits) Range Default value
      char System.Char 16 U +0000 to U +ffff ‘\0’

      例子 :

      // C# program to demonstrate 
      // the above data types
      using System;
      namespace ValueTypeTest {
            
      class GeeksforGeeks {
            
          // Main function
          static void Main()
          {
                
              // declaring character
              char a = 'G';
        
              // Integer data type is generally
              // used for numeric values
              int i = 89;
        
              short s = 56;
                
              // this will give error as number
              // is larger than short range
              // short s1 = 87878787878;
        
              // long uses Integer values which 
              // may signed or unsigned
              long l = 4564;
        
              // UInt data type is generally
              // used for unsigned integer values
              uint ui = 95;
        
              ushort us = 76;
              // this will give error as number is
              // larger than short range
        
              // ulong data type is generally
              // used for unsigned integer values
              ulong ul = 3624573;
        
              // by default fraction value
              // is double in C#
              double d = 8.358674532;
        
              // for float use 'f' as suffix
              float f = 3.7330645f;
        
              // for float use 'm' as suffix
              decimal dec = 389.5m;
        
              Console.WriteLine("char: " + a);
              Console.WriteLine("integer: " + i);
              Console.WriteLine("short: " + s);
              Console.WriteLine("long: " + l);
              Console.WriteLine("float: " + f);
              Console.WriteLine("double: " + d);
              Console.WriteLine("decimal: " + dec);
              Console.WriteLine("Unsinged integer: " + ui);
              Console.WriteLine("Unsinged short: " + us);
              Console.WriteLine("Unsinged long: " + ul);
          }
      }
      }
      

      输出 :

      char: G
      integer: 89
      short: 56
      long: 4564
      float: 3.733064
      double: 8.358674532
      decimal: 389.5
      Unsinged integer: 95
      Unsinged short: 76
      Unsinged long: 3624573
      

      例子 :

      // C# program to demonstrate the Sbyte
      // signed integral data type
      using System;
      namespace ValueTypeTest {
        
      class GeeksforGeeks {
        
          // Main function
          static void Main()
          {
              sbyte a = 126;
        
              // sbyte is 8 bit 
              // singned value
              Console.WriteLine(a);
        
              a++;
              Console.WriteLine(a);
        
              // It overflows here because
              // byte can hold values 
              // from -128 to 127
              a++;
              Console.WriteLine(a);
        
              // Looping back within 
              // the range
              a++;
              Console.WriteLine(a);
          }
      }
      }
      

      输出 :

      126
      127
      -128
      -127
      

      例子 :

      // C# program to demonstrate 
      // the byte data type
      using System;
      namespace ValueTypeTest {
        
      class GeeksforGeeks {
            
          // Main function
          static void Main()
          {
              byte a = 0;
        
              // byte is 8 bit 
              // unsigned value
              Console.WriteLine(a);
        
              a++;
              Console.WriteLine(a);
        
              a = 254;
                
              // It overflows here because
              // byte can hold values from
              // 0 to 255
              a++;
              Console.WriteLine(a);
        
              // Looping back within the range
              a++;
              Console.WriteLine(a);
          }
      }
      }
      

      输出 :

      0
      1
      255
      0
      
    • 布尔类型:必须为其分配true或false值。 bool类型的值不会隐式或显式(使用强制转换)转换为任何其他类型。但是程序员可以轻松地编写转换代码。
      Alias Type name Values
      bool System.Boolean True / False

      例子 :

      // C# program to demonstrate the
      // boolean data type
      using System;
      namespace ValueTypeTest {
            
          class GeeksforGeeks {
                
          // Main function
          static void Main() 
          {
                
              // boolean data type
              bool b = true;     
              if (b == true)
                  Console.WriteLine("Hi Geek");
          } 
      }
      }
      

      输出 :

      Hi Geek
      
  2. 参考数据类型:参考数据类型将包含变量值的内存地址,因为参考类型不会将变量值直接存储在内存中。内置的引用类型是字符串,object。
    • String:它表示Unicode字符序列,类型名称为System.String 。因此, 字符串和String是等效的。
      例子 :
      string s1 = "hello"; // creating through string keyword  
      String s2 = "welcome"; // creating through String class  
      
    • Object:在C#中,所有类型(预定义和用户定义的类型,引用类型和值类型)都直接或间接继承自Object。因此,基本上,它是C#中所有数据类型的基类。在分配值之前,它需要类型转换。将值类型的变量转换为对象时,称为boxing 。当类型为object的变量转换为值类型时,称为unboxing 。它的类型名称是System.Object

      例子 :

      // C# program to demonstrate 
      // the Reference data types
      using System;
      namespace ValueTypeTest {
            
      class GeeksforGeeks {
            
          // Main Function
          static void Main() 
          {
                
              // declaring string
              string a = "Geeks"; 
                
              //append in a
              a+="for";
              a = a+"Geeks"; 
              Console.WriteLine(a);
                
              // declare object obj
              object obj;
              obj = 20;
              Console.WriteLine(obj);
                
              // to show type of object
              // using GetType()
              Console.WriteLine(obj.GetType()); 
          } 
      }
      }
      

      输出 :

      GeeksforGeeks
      20
      System.Int32
      
  3. 指针数据类型:指针数据类型将包含变量值的内存地址。
    要获取指针的详细信息,我们有两个符号“ &”(&)和星号(*)
    “&”号(&)它被称为地址运算符。它用于确定变量的地址。
    星号(*)也称为间接运算符。它用于访问地址的值。
    句法 :
    type* identifier;
    

    例子 :

    int* p1, p;   // Valid syntax
    int *p1, *p;   // Invalid 
    

    例子 :

    // Note: This program will not work on
    // online compiler
    // Error: Unsafe code requires the `unsafe' 
    // command line option to be specified
    // For its solution:
    // Go to your project properties page and
    // check under Build the checkbox Allow
    // unsafe code.
    using System;
    namespace Pointerprogram {
          
    class GFG {
      
        // Main function
        static void Main()
        {
            unsafe
            {
                  
                // declare variable
                int n = 10;
                  
                // store variable n address 
                // location in pointer variable p
                int* p = &n;
                Console.WriteLine("Value :{0}", n);
                Console.WriteLine("Address :{0}", (int)p);
            }
        }
    }
    }