原文地址: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#中的几个特殊符号.

\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";

编译报错.

 

C#编程(四)的更多相关文章

  1. shell 编程四剑客简介 find sed grep awk(微信公众号摘抄)

    一,Shell编程四剑客之Find 通过如上基础语法的学习,读者对Shell编程有了更近一步的理解,Shell编程不再是简单命令的堆积,而是演变成了各种特殊的语句.各种语法.编程工具.各种命令的集合. ...

  2. Shell编程四剑客包括:find、sed、grep、awk

    一.Shell编程四剑客之Find Find工具主要用于操作系统文件.目录的查找,其语法参数格式为: find path -option [ -print ] [ -exec -ok command ...

  3. 【Java并发编程四】关卡

    一.什么是关卡? 关卡类似于闭锁,它们都能阻塞一组线程,直到某些事件发生. 关卡和闭锁关键的不同在于,所有线程必须同时到达关卡点,才能继续处理.闭锁等待的是事件,关卡等待的是其他线程. 二.Cycli ...

  4. Java 并发编程(四):如何保证对象的线程安全性

    01.前言 先让我吐一句肺腑之言吧,不说出来会憋出内伤的.<Java 并发编程实战>这本书太特么枯燥了,尽管它被奉为并发编程当中的经典之作,但我还是忍不住.因为第四章"对象的组合 ...

  5. linux网络编程之socket编程(四)

    经过两周的等待,终于可以回归我正常的学习之旅了,表哥来北京了在我这暂住,晚上回家了基本在和他聊天,周末带他在北京城到处乱转,几乎剥夺了我自由学习的时间了,不过,亲人之情还是很难得的,工作学习并不是生活 ...

  6. Java高并发网络编程(四)Netty

    在网络应用开发的过程中,直接使用JDK提供的NIO的API,比较繁琐,而且想要进行性能提升,还需要结合多线程技术. 由于网络编程本身的复杂性,以及JDK API开发的使用难度较高,所以在开源社区中,涌 ...

  7. 深入理解JS异步编程四(HTML5 Web Worker)

    >Web Workers 是 HTML5 提供的一个javascript多线程解决方案,我们可以将一些大计算量的代码交由web Worker运行而不冻结用户界面. 一:如何使用Worker We ...

  8. Linux 网络编程四(socket多线程升级版)

    //网络编程--客户端 #include <stdio.h> #include <stdlib.h> #include <string.h> #include &l ...

  9. Linux网络编程(四)

    在linux网络编程[1-3]中,我们编写的网络程序仅仅是为了了解网络编程的基本步骤,实际应用当中的网络程序并不会用那样的.首先,如果服务器需要处理高并发访问,通常不会使用linux网络编程(三)中那 ...

  10. shell编程(四)之循环控制语句(for,while,until,break,continue,case)

    for循环 语法:for NAME in LIST; do 循环体 done 列表生成方式:1.整数列表 {start...end} $(seq,[start [step]] end)2.glob / ...

随机推荐

  1. C# 在RichTextBox根据内容自动调整高度

    private void richTextBox1_ContentsResized(object sender, ContentsResizedEventArgs e)   {   richTextB ...

  2. more命令 less命令

    more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作.more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行), ...

  3. #Git 详细中文安装教程

    Step 1 Information 信息 Please read the following important information before continuing 继续之前,请阅读以下重要 ...

  4. Cocos2d-x for Windows Phone 用法总结

    鉴于诺基亚(微软移动这个没人用的手机)开发者比较少,cocos2dx移植方面更是少的问题,总结一下WP8移植方面的资料,希望对大家有用,自己也当作笔记留念. 1.WP8方面有两种方式创建项目,Hell ...

  5. USACO 5.1 Fencing the Cows

    Fencing the CowsHal Burch Farmer John wishes to build a fence to contain his cows, but he's a bit sh ...

  6. 解决Python爬虫使用requests包控制台输出乱码问题

    输出爬取的信息为乱码! 解决办法 爬取下来的编码是ISO-8859-1格式,需要转化为utf-8格式,加一句response.encoding = "utf8"

  7. URLconf+MTV:Django眼中的MVC

    MVC是众所周知的模式,即:将应用程序分解成三个组成部分:model(模型),view(视图),和 controller(控制 器).其中:              M 管理应用程序的状态(通常存储 ...

  8. ArrayList源码中EMPTY_ELEMENTDATA和DEFAULTCAPACITY_EMPTY_ELEMENTDATA的区别

    2018年7月22日09:54:17 JDK 1.8.0_162 ArrayList源码中EMPTY_ELEMENTDATA和DEFAULTCAPACITY_EMPTY_ELEMENTDATA的区别 ...

  9. Python 入门之基本数据类型

    为什么我要学习Python这门语言呢?其实很简单,我想拓展技术面的同时,尝试更多的方向,可能最后会不了了之,谁知道呢?有可能的话,我会向爬虫和数据分析这个方向走.所以也就开始了我的Python学习之旅 ...

  10. shell 统计行数

    语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...