zoukankan      html  css  js  c++  java
  • C#编程(四)

    原文地址:http://blog.csdn.net/shanyongxu/article/details/46400067

    C#预定义数据类型

    C#中的可用类型以及及其定义非常严格,C#中获得数据类型分为两种,第一种是值类型,第二种是引用类型.区别是值类型直接存储值,引用类型存储值的引用.值类型存储在堆栈中,引用类型存储在托管堆中.要能区分值类型还是引用类型,因为不同类型有不同的影响.

    例如int是值类型,int i=20,j=i;这两行语句会在内存的两个地方存储值20.

    CTS类型:CTS包括  类、接口 、结构体、枚举、委托.这5种类型。还有那些内建的值类型,int、double之类的。
    因此我觉得,其实CTS就是由 值类型、引用类型 构成,涵括C#所有数据类型。他本身不是一种数据类型.

    假如: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#中的几个特殊符号.

    :换行

    :水平制表符(一个tab键,相当于四个空格)

    :回车

    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和石榴进制数注意序列.就是我们说的特殊符号(例如 ),转移序列以一个反斜杠,所以不能在字符串中使用这个肺转移的反斜杠字符,而需要用两个反斜杠字符(\)来表示它:

    string filePath=”c:\users\syx\desktop”;//表示c:userssyxdesktop即用户的桌面

    但是这样似乎与我们的书写情况不符合,所以就引入了(@)字符,这个字符的含义是该字符后面所有的都不起作用,即只是单纯的一个\,它们不会解释为转义字符:

    所以上面的情况可以这么表示:string filePath=@”c:userssyxdesktop”;

    甚至可以包含换行符:

    string str = @"hello 

    world";

    如果没有(@):

    string str ="hello 

    world";

    编译报错.

     
  • 相关阅读:
    我的浏览器收藏夹分类
    我的浏览器收藏夹分类
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
  • 原文地址:https://www.cnblogs.com/android-blogs/p/6428734.html
Copyright © 2011-2022 走看看