在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
原文地址:http://blog.csdn.net/shanyongxu/article/details/46400067
C#预定义数据类型 C#中的可用类型以及及其定义非常严格,C#中获得数据类型分为两种,第一种是值类型,第二种是引用类型.区别是值类型直接存储值,引用类型存储值的引用.值类型存储在堆栈中,引用类型存储在托管堆中.要能区分值类型还是引用类型,因为不同类型有不同的影响. 例如int是值类型,int i=20,j=i;这两行语句会在内存的两个地方存储值20. CTS类型:CTS包括 类、接口 、结构体、枚举、委托.这5种类型。还有那些内建的值类型,int、double之类的。
假如:class Vector { int value; } Vector x,y; x=new Vector(); x.value=30; y=x; Console.WriteLine(y.value); y.value=50; Console.WriteLine(x.value);
要好好的理解这一段代码,改代码只有一个Vactor对象.x和y都指向了该内存的位置.因为x和y都是引用类型,声明这两个变量只保留了一个引用. x--->一块内存<---y,x和y值相同一块内存,这就是引用类型,所以y的值改变,相应的x的值也就改变了.这个语法像不像C++里面的引用?注意是引用,不是指针.我们使用(.)符号访问对象成员,而不是使用(->)访问. C#中把基本数据类型规定为值类型,把包含许多字段的较大类型(通常在有类的情况下)规定为引用类型.如果要把自己的类型定义为值类型,就因该把他声明为一个结构(结构并不常用).
在C#总生命一个int类型的数据时,声明的实际上是.NET结构System.Int32的一个实例.这其实不难理解,意思是说把所有的基本数据类型看做是支持某些方法的类.例如int转换为string.可以用到这样的方法:string s=i.ToString();
C#中有15个预定义的类型,13个值类型,2个引用类型(string,object) 预定义的值类型 1.整型: C#支持8个预定义的整数类型:sbyte,short,int,long,byte,ushort,uint,ulong.比较多见的是int类型和byte类型. int类型对应的CTS类型是System.Int32表示的是32位有符号的整数,取值范围是-2147483648-2147483647 byte类型对应的CTS类型System.Byte表示的是8位无符号的整数,范围是0-255. 注意C#中的int是32位带符号的整数.而在C++中,int类型是带符号的整数,位数取决于平台.在C#中,所有的数据类型都与平台无关. 2.浮点类型 float类型对应的CTS类型是System.Single,表示32位单精度的浮点数. double类型对应的CTS类型是System.Double,表示64位双精度浮点类型. float数据类型用于较小的浮点数,因为他要求的精度较低.double数据类型比float数据类型大. 如果再编码中没有对某个非整数值(12.34)硬编码,则编译器一般家丁该变量是double,如果非要指定float类型,可以在后面加上字符F(f);float f=12.34F; 3.decimal类型 decimal类型表示精度更高的浮点数. decimal类型对应的CTS类型是System.Decimal,能保留到小数点后的28位,是128位高精度十进制表示法,主要用来进行财务计算.decimal类型不是基本类型,所以在计算时使用该类型会有性能损失.定义变量的方式 decimal d=12.3M;要指定是decimal类型需要在值后面加上M(m),这一点和float相似. 4.bool类型 C#中的bool类型只能是:true或false bool类型对应的CTS类型是System.Boolean. bool值和整数值不能相互隐式转换.如果变量(或者函数的返回类型)声明为bool类型,就只能使用true或者false.如果试图使用0表示false,非0表示true,就会出错. 5.字符类型 为了保存单个字符,C#中有了char类型,其对应的CTS类型为System.Char,表示一个16位的(Unicode)字符. 定义char类型的字面量使用单引号括起来的.例如:char c=’A’;如果使用了双引号,编译器认为这是一个字符串,就会报错. C#中的几个特殊符号. \n:换行 \t:水平制表符(一个tab键,相当于四个空格) \r:回车 \a:警告
预定义的引用类型 object的CTS类型是System.Object,object是根类型,CTS中其他类型都是由他派生而来. string对应的CTS类型是System.String,Unicode字符串 在C#中object就是最终的父类型,所有的内置类型和用户定义的类型都是由他派生而来.这样object类型可以用于两个目的: 1.可以使用object引用绑定任何子类型的对象. 2.object类型执行许多一般用途的基本方法,包括Equals(),GetHashCode(),getType()和ToString().也就是说所有的用户自定义类或者内置类型都可以使用这些方法,也可以重写这些方法.
2.string类型 有了这个关键字,字符串的连接或者复制简单了很多. string str1=”hello ”; string str2=”world”; string str3=str1+str2; 输出str3的结果是hello world 但是考虑这样的代码: string str1 = "hello"; string str2 = str1; Console.WriteLine(str1); Console.WriteLine(str2); str1 = "world"; Console.WriteLine(str1); Console.WriteLine(str2); Console.ReadKey(); 结果并不是我们认为的输出两个world,即改变str1的值对str2的值无影响.似乎与我们期待的引用类型正好相反.当用”hello”初始化str1时,就在对上分配了一个新的string对象.在初始化str2的时候,引用也指向了这个对象,多以str2的值是hello.但是当改变了str1的值的时候,并不会替换原来新的值.返回会在堆上为新值分配一个新对象.str2变量仍然指向”hello”,所以他的值没有变化. 原来: str1-->”hello”<--str2 后来: str1->”world” , ”hello”<--str2
子义字符串常量的时候,用双引号包起来:string str=”hello”; 相似的C#字符串和char一样,可以包含Unicode和石榴进制数注意序列.就是我们说的特殊符号(例如\n),转移序列以一个反斜杠,所以不能在字符串中使用这个肺转移的反斜杠字符,而需要用两个反斜杠字符(\\)来表示它: string filePath=”c:\\users\\syx\\desktop”;//表示c:\users\syx\desktop即用户的桌面 但是这样似乎与我们的书写情况不符合,所以就引入了(@)字符,这个字符的含义是该字符后面所有的\都不起作用,即只是单纯的一个\,它们不会解释为转义字符: 所以上面的情况可以这么表示:string filePath=@”c:\users\syx\desktop”; 甚至可以包含换行符: string str = @"hello world"; 如果没有(@): string str ="hello world"; 编译报错. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论