C# ----- C# 数据类型
在C# 中,变量主要分为三种类型:值类型,引用类型,指针类型
java 中据我了解有两种 基本类型和引用类型
主要就是注意,声明变量的时候是否创建一个存储空间
值类型(Value types)
定以:从类 System.ValueType 中派生的,
值类型变量可以直接分配给一个值,直接包含数据(如 int、char、float,它们分别存储数字、字符、浮点数)
特点:当声明一个值类型时,系统分配内存来存储值
C# 中可用的值类型: Java中有 8 大基本类型,C#中都含有,就是 bool 与 boolean 书写不同,主要分为整数、小数(浮点)、字符、布尔
注意:C# 语言中默认的整型是 int 类型、默认的浮点型是 double 类型
如何得到一个类型或变量在特定平台的尺寸,使用 sizeof(type) 方法,以字节为单位。
引用类型(Reference types)
定义:不包含存储在变量中的实际数据,但它们包含对变量的引用。
特点:一个内存位置。使用多个变量时,引用类型可以指向一个内存位置,如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。
内置的 引用类型有:object、dynamic 和 string
对象(Object) 类型(System.Object 类的别名) : C# 通用类型系统(Common Type System) 中所有数据类型的终极基类,也就是源头爸爸。
对象(Object) 类型可以分配任何其他类型 { 值类型,引用类型 [ 预定义类型(系统中内置的)、用户自定义类型(用户自定义引用类型有:class、interface 或 delegate)] } 的值,分配值 之前要进行类型转换。
装箱与拆箱:主要就是将值类型转换为对象类型。(java 中 1.5 后可以自动拆装箱了,在Java中内置了八大基本类型对应的包装类。)
动态(Dynamic)类型
可以存储任何类型的值在动态数据类型变量中,这些变量的类型检查是在运行时发生的。
与对象类型对比: 对象类型变量在编译
动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的。
字符串(String) 类型
String 类型(System.String 类的别名):允许给其分配任何字符串值。从对象类型(Object)派生而来。
字符串(String ) 类型的值可以通过两种方式进行分配:双引号("obge") 和 @双引号( @"obge")
注意:
1、string是c#中的类,String是.net Framework的类(在c# IDE中不会显示蓝色)
2、c# string映射为.net Framework的String ,使用C#时建议使用string 比较规范
字符串和值类型的转换,主要就是借助 Parse() 和 Convert.To数据类型(变量名)
Convert 方法是数据类型转换中最灵活的方法,它能够将任意数据类型的值转换成任意数据类型,前提是不要超出指定数据类型的范围。
Parse 方法用于将字符串类型转换成任意类型
指针类型(Pointer types)
指针类型变量存储另一种类型的内存地址
指针:一个变量,其值为另一个变量的地址的变量,即,内存位置的直接地址。就像其他变量或常量,您必须在使用指针存储其他变量地址之前声明指针。
声明语法: 注意 *
变量类型 * 指针变量名;
赋值: 注意 &
指针变量名 = &其他类型变量名;
// 表示在指针变量名中存储 其他变量的内存地址
计算机中有个存储数据的叫储存器(分为 ram 和 rom), 首先是储存在 内存中(也就是ram 随机存储器,与cpu 直接交互的,其内部有好多的元器件进行存储,这个元器件就有两种状态0或1也就是有电,没电(多好要么有要么没),虽然一个元器件只有两种状态,但是多个组合就很大了,突然一组合就有了 Bit,Byte,KB,MB,GB,TB,PB,EB 的概念了 那么元器件也就有了另一个名字 比特(bit)或位,),在内存中的数据有不同的类型,而不同类型数据占用的字节数不一样,如 int 占4个字节,byte 占1 个字节,为了正确访问这些存储的数据,必须给每个字节都编上号码,每个编号都是惟一的,根据编号就能准确找到某个字节,而在内存中字节的编号又被称为地址(Address)或指针(Pointer)。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace obge { class Program { static void Main(string[] args) { //装箱:将值类型转换为引用类型的过程 int int1 = 100; object obj1 = int1; Console.WriteLine("对象的值 = {0}", obj1); //拆箱:将值类型转换为引用类型,再由引用类型转换为值类型的过程 int int2 = 100; object obj2 = int2; // 引用类型转换为 值类型需要强转 int num = (int)obj2; Console.WriteLine("num:"+ num); //声明动态类型语法 : dynamic 变量名 = 值; dynamic zheng = 1; dynamic xiao = 1.22; dynamic ziFu = 'o'; dynamic chuan = "obge是"; String str = "test"; string sXiao = "oo"; //1、C# string 字符串的前面可以加 @(称作"逐字字符串")将转义字符(\)当作普通字符对待 string st1 = @"C:\Windows"; //等价于 string str11 = "C:\\Windows"; //2、@ 字符串中可以任意换行,换行符及缩进空格都计算在字符串长度之内。 string st2 = @"<script type=""text/javascript""> <!-- --> </script>"; //由于会一闪而过,所以在加一个输入 Console.ReadLine(); Console.WriteLine(sizeof(int)); //也可以写成 Console.WriteLine("Size of int: ", sizeof(int)); Console.WriteLine("Size of int1: " + sizeof(int)); Console.WriteLine("Size of int2: {0}", sizeof(int)); } } }