数据类型指定有效的C#变量可以保存的数据类型。 C#是一种强类型化的编程语言,因为在C#中,每种类型的数据(例如整数,字符,浮点数等)都已预先定义为编程语言的一部分,并且必须使用以下方式描述为给定程序定义的所有常量或变量:数据类型之一。
C#中的数据类型主要分为三类
- 值数据类型
- 参考数据类型
- 指针数据类型
- 值数据类型:在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种浮点数据类型,其中包含小数点。
- Float : 32位单精度浮点类型。它具有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
- 有符号和无符号整数类型:有8种整数类型,以有符号或无符号形式提供对8位,16位,32位和64位值的支持。
- 参考数据类型:参考数据类型将包含变量值的内存地址,因为参考类型不会将变量值直接存储在内存中。内置的引用类型是字符串,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
- String:它表示Unicode字符序列,类型名称为System.String 。因此, 字符串和String是等效的。
- 指针数据类型:指针数据类型将包含变量值的内存地址。
要获取指针的详细信息,我们有两个符号“ &”(&)和星号(*) 。
“&”号(&) :它被称为地址运算符。它用于确定变量的地址。
星号(*) :也称为间接运算符。它用于访问地址的值。
句法 :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); } } } }