C# 是一种面向对象的编程语言,它支持多种数据类型,包括基本数据类型、引用数据类型、泛型数据类型以及其他特殊数据类型。C# 中的数据类型可以分为两大类:内部数据类型(内部存储)和外部数据类型(外部存储)。
C# 中的内部数据类型包含了布尔、字节、字符、十进制整形、双浮点、单浮点、长整形以及无限大的定义。这些内部数据类型在 C# 的内存中进行存储,并且在使用时不需要显式声明。
C# 中的外部数据类型包含了字节流、文本文件、图片文件以及其他文件格式。这些外部数据不会直接在 C# 的内存中进行存储,而是通过文件流或者其他方式来读取或者保存到外部文件中。
此外,C# 还有一些特定的特性来定义不同的数据格式。例如,使用 [Flags] 声明来定义位标志体(Bit Flags Enum) 来表达一个成员可能有多项选项的情况。此外,[Serializable] 声明也是一个重要的特性,它能将对象序列化成 XML 样式的文本格式来保存到文件中。
public enum MyEnum { None = 0, Option1 = 1, Option2 = 2, Option3 = 4, Option4 = 8, }
类型定义值的蓝图。有不同的操作与不同类型相关联。
在下面的示例中,我们使用两个类型为int
的常量,值为2
和 3
。
static void Main() {
int x = 2 * 3;
Console.WriteLine (x);
}
int
是一个表示整数值的构建类型。
C#也定义类型,如long,string,byte ...
我们在上面的代码中声明了一个类型为 int
的变量,其名称为 x
。
变量表示可以包含不同值的内存位置。我们可以为变量赋予不同的值。
相反,常数总是表示相同的值:
const int y = 6;
相反,常数总是表示相同的值:
C#中的所有值都是类型的实例。
预定义类型是编译器支持的类型。
上面示例中的int
类型是用于表示整数集合的预定义类型,从-231到231-1。
我们可以执行函数,如与int类型的实例的算术如下:
int x = 2 * 3;
C#有其他类型。C#type string
表示一个序列字符,如“.NET"。
我们可以通过调用函数来处理字符串,如下所示:
string message = "Hello world";
string upperMessage = message.ToUpper();
Console.WriteLine (upperMessage);
上面的代码生成以下结果。
int x = 2;
message = message + x.ToString();
Console.WriteLine (message);
上面的代码生成以下结果。
所有C#类型分为以下类别:
值类型包括大多数内置类型,例如,int,long,bool以及自定义结构和枚举类型。
引用类型包括所有类,数组,委托和接口类型。它还包括预定义的 string
类型。
值类型变量或常量的内容是一个值。
我们可以使用 struct
关键字定义一个自定义值类型:
public struct Point {
public int X, Y;
}
值类型实例的分配始终会复制实例。
例如:
static void Main() {
Point p1 = new Point();
p1.X = 1;
Point p2 = p1; // Assignment causes copy
Console.WriteLine (p1.X); // 1
Console.WriteLine (p2.X); // 1
p1.X = 2; // Change p1.X
Console.WriteLine (p1.X); // 2
Console.WriteLine (p2.X); // 1
}
引用类型有两部分:一个对象和对该对象的引用。
引用类型变量的内容是对包含该值的对象的引用。
这里是作为类重写的Point类型:
public class Point {
public int X, Y;
}
分配引用类型变量会复制引用,而不是对象实例。
这允许多个变量引用同一个对象。
static void Main() {
Point p1 = new Point();
p1.X = 1;
Point p2 = p1; // Copies p1 reference
Console.WriteLine (p1.X); // 1
Console.WriteLine (p2.X); // 1
p1.X = 2; // Change p1.X
Console.WriteLine (p1.X); // 2
Console.WriteLine (p2.X); // 2
}
一个引用可以分配常量null,表示引用指向没有对象:
class Point {...}
Point p = null;
Console.WriteLine (p == null); // True
值类型通常不能为null值:
C#中的预定义类型有:
C#别名中的预定义类型System
命名空间中的框架类型。
这两个语句之间只有语法上的区别:
int i = 5;
System.Int32 i = 5;
C#数字类型C#具有下表中显示的预定义数字类型。有符号整数C#类型系统类型后缀大小范围sbyteSByte无后缀8位-27 〜27-1shortInt...
C#算术运算符为所有数字类型定义算术运算符(+, - ,*,/,%)。运算符含义+加-减*剩/除%求余自增和自减运算符自增和自减运算...
C#数组数组表示特定类型的固定数量的变量。 在元素类型后面创建一个带方括号的数组。 例如:char[] letterArray = new char[5]; ...
C#参数方法可以具有参数序列。参数定义必须为该方法提供的参数集。在以下示例中,myMethod方法具有名为p的单个参数,类型为int...