![](/icons/84869yi.gif)
、预定义类型
![](/icons/84869dou2.gif)
1、值类型和引用类型
C#中
![](/icons/84869de.gif)
数据类型
![](/icons/84869dou.gif)
可以分为值类型和引用类型
![](/icons/84869dou.gif)
值类型存储在堆栈上
![](/icons/84869dou.gif)
而引用类型存储在托管堆上
![](/icons/84869dou2.gif)
如下代码举例
![](/icons/84869int.gif)
i=10;
![](/icons/84869int.gif)
j=i;
i和j
![](/icons/84869de.gif)
值都是10
![](/icons/84869dou.gif)
并且在内存中会有两个地方存储10.
再看下面
![](/icons/84869de.gif)
代码
Vector x=
Vector
;
x.Value=20;
Vector y=x;
Console.WriteLine(y.Value);
y.Value=50;
Console.WriteLine(x.Value);
Vector是
![](/icons/84869yi.gif)
个引用类型
![](/icons/84869dou.gif)
引用类型在使用
![](/icons/84869de.gif)
时候需要
![](/icons/84869new.gif)
来例子化
![](/icons/84869yi.gif)
个
![](/icons/84869dou2.gif)
这段代码执行后
![](/icons/84869dou.gif)
只有
![](/icons/84869yi.gif)
个Vector对象
![](/icons/84869dou.gif)
x,y都指向包含该对象
![](/icons/84869de.gif)
内存地址
![](/icons/84869dou2.gif)
![](/icons/84869yinwei.gif)
x
![](/icons/84869dou.gif)
y存储
![](/icons/84869de.gif)
都是对象
![](/icons/84869de.gif)
引用
![](/icons/84869dou.gif)
所以当y改变
![](/icons/84869de.gif)
时候
![](/icons/84869dou.gif)
x也会改变
![](/icons/84869dou2.gif)
所以该
![](/icons/84869chengxu.gif)
输出
![](/icons/84869de.gif)
结果是20和50.
如果变量是
![](/icons/84869yi.gif)
个引用
![](/icons/84869dou.gif)
就可以把其值设置为null
![](/icons/84869dou.gif)
表示不指向任何对象
![](/icons/84869dou2.gif)
2、CTS类型
![](/icons/84869dou2.gif)
C#
![](/icons/84869de.gif)
预定义类型并没有内置于语言中
![](/icons/84869dou.gif)
而是内置于.NET Framework中
![](/icons/84869dou.gif)
比如声明
![](/icons/84869yi.gif)
个
![](/icons/84869int.gif)
类型时
![](/icons/84869dou.gif)
实际上是.NET结构
![](/icons/84869System.gif)
.Int32
![](/icons/84869de.gif)
![](/icons/84869yi.gif)
个例子
![](/icons/84869dou2.gif)
这介绍说明
![](/icons/84869dou.gif)
可以把所有
![](/icons/84869de.gif)
基本数据类型看作是支持某些思路方法
![](/icons/84869de.gif)
类
![](/icons/84869dou2.gif)
3、预定义
![](/icons/84869de.gif)
值类型
A、整型
s
![](/icons/84869dou.gif)
8位有符号
![](/icons/84869de.gif)
整数
![](/icons/84869dou.gif)
范围从 -128到127.
![](/icons/84869dou.gif)
8位无符号
![](/icons/84869de.gif)
整数
![](/icons/84869dou.gif)
范围从 0到255.
![](/icons/84869short.gif)
![](/icons/84869dou.gif)
16位有符号
![](/icons/84869de.gif)
整数
![](/icons/84869dou.gif)
范围从 -32768到32767
u
![](/icons/84869dou.gif)
16位无符号
![](/icons/84869de.gif)
整数
![](/icons/84869dou.gif)
范围从0到65535
![](/icons/84869int.gif)
![](/icons/84869dou.gif)
32位有符号
![](/icons/84869de.gif)
整数
![](/icons/84869dou.gif)
范围从-2147483648到2147483647
u
![](/icons/84869int.gif)
![](/icons/84869dou.gif)
32位无符号
![](/icons/84869de.gif)
整数
![](/icons/84869dou.gif)
范围从0到4294967295
long
![](/icons/84869dou.gif)
64位有符号
![](/icons/84869de.gif)
整数
![](/icons/84869dou.gif)
范围从-2
![](/icons/84869de.gif)
31次方到2
![](/icons/84869de.gif)
31次方减1
ulong
![](/icons/84869dou.gif)
64位无符号
![](/icons/84869de.gif)
整数
![](/icons/84869dou.gif)
范围从0到2
![](/icons/84869de.gif)
64次方减1
B、浮点类型
![](/icons/84869dou2.gif)
float
![](/icons/84869dou.gif)
32位单精度浮点数
![](/icons/84869dou2.gif)
double
![](/icons/84869dou.gif)
64位双精度浮点数
![](/icons/84869dou2.gif)
如果代码对某个非整数值
![](/icons/84869dou.gif)
如12.3硬编码
![](/icons/84869dou.gif)
则编译器
![](/icons/84869yi.gif)
般假定该变量是double
![](/icons/84869dou.gif)
如果想指定其为float
![](/icons/84869dou.gif)
则可以在后面加上
![](/icons/84869zifu.gif)
f
![](/icons/84869dou2.gif)
C、decimal类型
![](/icons/84869dou2.gif)
该类型是
![](/icons/84869yi.gif)
种财务专用数据类型
![](/icons/84869dou.gif)
是128位高精度十进制表示法
![](/icons/84869dou2.gif)
要把数据指定为decimal类型
![](/icons/84869de.gif)
![](/icons/84869dou.gif)
只需在数字后面加上M(或者m)
A、 bool类型
![](/icons/84869dou2.gif)
C#
![](/icons/84869de.gif)
bool类型包含true和false
![](/icons/84869dou2.gif)
B、
![](/icons/84869zifu.gif)
类型
![](/icons/84869dou2.gif)
也就是char类型
![](/icons/84869dou.gif)
表示
![](/icons/84869yi.gif)
个16位
![](/icons/84869de.gif)
unicode
![](/icons/84869zifu.gif)
![](/icons/84869dou2.gif)
char类型
![](/icons/84869de.gif)
字面量是采用 单引号 括起来
![](/icons/84869de.gif)
![](/icons/84869dou2.gif)
而不是双引号
![](/icons/84869dou2.gif)
双引号括起来
![](/icons/84869de.gif)
是
![](/icons/84869zifu.gif)
串类型
![](/icons/84869de.gif)
![](/icons/84869dou2.gif)
4、预定义引用类型
![](/icons/84869dou2.gif)
A、object类型
![](/icons/84869dou2.gif)
这是C#
![](/icons/84869de.gif)
基类
![](/icons/84869dou.gif)
所有
![](/icons/84869de.gif)
类都派生自它
![](/icons/84869dou2.gif)
所以
![](/icons/84869dou.gif)
可以使用object引用绑定任何子类型
![](/icons/84869de.gif)
对象
![](/icons/84869dou.gif)
object类型执行许多基本
![](/icons/84869de.gif)
![](/icons/84869yi.gif)
般用途
![](/icons/84869de.gif)
思路方法
![](/icons/84869dou.gif)
如 Equals
![](/icons/84869kh.gif)
GetHashCode
![](/icons/84869kh.gif)
,GetType
![](/icons/84869kh.gif)
等
![](/icons/84869dou.gif)
我们需要针对某些思路方法进行“重写”
![](/icons/84869dou.gif)
这在后面我们将会学习到
![](/icons/84869dou2.gif)
B、
![](/icons/84869string.gif)
类型
![](/icons/84869dou2.gif)
注意
![](/icons/84869dou.gif)
![](/icons/84869string.gif)
类型是属于引用类型
![](/icons/84869dou2.gif)
我们来看下面
![](/icons/84869yi.gif)
段代码
![](/icons/84869dou.gif)
在修改
![](/icons/84869yi.gif)
个
![](/icons/84869zifu.gif)
串
![](/icons/84869de.gif)
时候
![](/icons/84869dou.gif)
实际上是创建了
![](/icons/84869yi.gif)
个新
![](/icons/84869de.gif)
![](/icons/84869zifu.gif)
串
![](/icons/84869dou.gif)
而并非修改了原来在
![](/icons/84869zifu.gif)
串
![](/icons/84869dou2.gif)
我们来看
![](/icons/84869yi.gif)
个举例:
using
;
using
.Windows;
gosoa.com
{
MyFirstClass
{
void Main![](/icons/84869kh.gif)
{
str1="GoSoA.com.cn";
str2=str1;
Console.WriteLine("str1="+str1);
Console.WriteLine("str2="+str2);
str1="www.GoSoA.com.cn";
Console.WriteLine("str1="+str1);
Console.WriteLine("str2="+str2);
}
}
}
在这个举例中会输出
str1="GoSoA.com.cn";
str2="GoSoA.com.cn";
str1="www.GoSoA.com.cn";
str2="GoSoA.com.cn";
这和我们所预期
![](/icons/84869de.gif)
引用类型正好相反
![](/icons/84869dou.gif)
为什么呢?
![](/icons/84869yinwei.gif)
当我们用“GoSoA.com.cn”来
![](/icons/84869chushi.gif)
化str1
![](/icons/84869de.gif)
时候
![](/icons/84869dou.gif)
就在堆上分配了
![](/icons/84869yi.gif)
个
![](/icons/84869string.gif)
对象
![](/icons/84869dou.gif)
当
![](/icons/84869chushi.gif)
化str2
![](/icons/84869de.gif)
时候
![](/icons/84869dou.gif)
也指向了这个对象
![](/icons/84869dou2.gif)
当str1改变
![](/icons/84869de.gif)
时候
![](/icons/84869dou.gif)
并不是修改了原有
![](/icons/84869de.gif)
对象
![](/icons/84869dou.gif)
而是新创建了
![](/icons/84869yi.gif)
个对象
![](/icons/84869dou.gif)
但str2还是指向原来
![](/icons/84869de.gif)
对象
![](/icons/84869dou.gif)
所以
![](/icons/84869dou.gif)
str2
![](/icons/84869de.gif)
值并未改变
延伸阅读
最新评论