C#中的数据类型

来源:互联网 发布:大数据行业前景 编辑:程序博客网 时间:2024/04/28 13:50

原文地址:http://www.dingos.cn/index.php?topic=1069.0

【C# 类型体系】
C# 类型体系包含下列几种类别:
  • 值类型:存储数据
  • 引用类型:存储对实际数据的引用。引用类型也称为对象。
  • 指针类型:仅可用于 unsafe 模式。
值类型的变量存储数据,而引用类型的变量存储对实际数据的引用。引用类型也称为对象。指针类型仅可用于 unsafe 模式。
通过装箱和取消装箱,可以将值类型转换为引用类型,然后再转换回值类型。除了装箱值类型外,无法将引用类型转换为值类型。
值类型也可以为 null,这意味着它们能存储其他非值状态。

【值类型】
值类型主要由两类组成:
  • 结构
  • 枚举
结构分为以下几类:
  • Numeric(数值)类型
    • 整型
    • 浮点型
    • decimal
  • bool
  • 用户定义的结构。

【值类型的主要功能】
基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
所有的值类型均隐式派生自 System.ValueType。
与引用类型不同,可以从值类型派生出新的类型。但与引用类型相同的是,结构也可以实现接口。
与引用类型不同,值类型无法包含 null 值。然而,可译为 null 的类型功能确实允许将 null 赋给值类型。
每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。

【初始化值类型】
在使用 C# 中的局部变量之前,必须对其进行初始化。例如,可能声明未进行初始化的局部变量,如以下示例所示:
int myInt;

那么在将其初始化之前,无法使用此变量。可使用下列语句将其初始化:
myInt = new int(); // Invoke default constructor for int type.

此语句是下列语句的等效语句:
myInt = 0;  // Assign an initial value, 0 in this example.

当然,可以用同一个语句进行声明和初始化,如下面示例所示:
int myInt = new int();
- 或 -
int myInt = 0;

使用 new 运算符时,将调用特定类型的默认构造函数并对变量赋以默认值。

对于用户定义的类型,使用 new 来调用默认构造函数。
Point p = new Point(); // Invoke default constructor for the struct.

此调用后,该结构被认为已被明确赋值;也就是说该结构的所有成员均已初始化为各自的默认值。

【引用类型】
引用类型的变量又称为对象,可存储对实际数据的引用。包括: 
  • class
  • interface
  • delegate

【内置数据类型】
C# 是一种强类型语言。在变量中存储值之前,必须指定变量的类型。
int a = 1;
string s = "Hello";
XmlDocument tempDocument = new XmlDocument();
注意,对于简单的内置类型(如 int)以及复杂的或自定义的类型(如 XmlDocument)都必须指定类型。

【C# 包括对下面的内置数据类型的支持】
数据类型
范围
byte0 .. 255sbyte-128 .. 127short-32,768 .. 32,767ushort0 .. 65,535int-2,147,483,648 .. 2,147,483,647uint0 .. 4,294,967,295long-9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807ulong0 .. 18,446,744,073,709,551,615float-3.402823e38 .. 3.402823e38double-1.79769313486232e308 .. 1.79769313486232e308decimal-79228162514264337593543950335 .. 79228162514264337593543950335char一个 Unicode 字符。stringUnicode 字符的一个字符串。boolTrue 或 False。object一个对象。

【内置数据类型在 C# 程序中有几种用法】
1. 作为变量:
int answer = 42;
string greeting = "Hello, World!";

2. 作为常数:
const int speedLimit = 55;
const double pi = 3.14159265358979323846264338327950;

3. 作为返回值和参数:
long CalculateSum(int a, int b){
    long result = a + b;
    return result;
}

【默认值表】
由默认构造函数返回的值类型的默认值。默认构造函数是通过 new 运算符来调用的。
bool - false 
byte - 0
char - '/0'
decimal - 0.0M
double - 0.0D
enum - 表达式 (E)0 产生的值,其中 E 为 enum 标识符。
float - 0.0F
int - 0
long - 0L
sbyte - 0
short - 0
struct - 将所有的值类型字段设置为默认值并将所有的引用类型字段设置为 null 时产生的值。
uint - 0
ulong - 0
ushort - 0

【C# 中的数据类型分为两个基本类别】
  • 值类型
    • 表示实际数据
    • 只是将值存放在内存中
    • 值类型都存储在堆栈中
    • int、char、结构
  • 引用类型
    • 表示指向数据的指针或引用
    • 包含内存堆中对象的地址
    • 为 null,则表示未引用任何对象
    • 类、接口、数组、字符串
static void Main(string[] args){
    int val = 100;    // 声明一个值类型的整型数据类型
    Console.WriteLine("该变量的初始值为  {0}", val);   
    Test(val);    // 由于该数据类型属于值类型,所以将恢复其初始值
    Console.WriteLine("该变量的值此时为  {0}", val);   
}
static void Test(int getVal){
    int temp = 10;
    getVal = temp * 20;
}
class DataTypeTest{
    public int Val;
}
static void Main(string[] args){
    DataTypeTest objTest = new DataTypeTest();
    objTest.Val = 100;
    Test(objTest);    // 传递属于引用类型的对象
    // 由于该数据类型属于引用类型,所以会考虑新处理的值
    Console.WriteLine("变量的值为  {0}", objTest.Val);
}
static void Test(DataTypeTest dataTest){
    int temp = 10;
    dataTest.Val = temp * 20;
}

【值类型和引用类型的区别】
  • 值类型和引用类型的基本区别在于在内存中的存储方式。
    • 值类型将值存放在内存中,存储在堆栈中;
    • 引用类型的内存单元中只存放内存堆中对象的地址,而对象本身存放在内存堆中。
  • 若引用类型的值是null,则表示未引用任何对象;
  • 将一个值类型变量的内容赋值给另一个数值类型变量时,变量值被拷贝。
  • 将一个引用类型的变量的内容赋值给另一个引用类型变量时,只是变量的内存地址被拷贝。

【装箱和取消装箱】
装箱是从值类型到引用类型的转换
取消装箱是从引用类型到值类型的转换

【C# 中的数据类型处理】
C# 提供了一种“统一类型系统”
C# 中所有数据类型都是从一个类即 object 类派生而来的

using System;
class ObjectProff{
    public static void Main(){
        string Objectval;
        Objectval = 7.ToString();
    }
}