C# 入门(2) C#类型与C/C++的差异
来源:互联网 发布:怎么用python做计算 编辑:程序博客网 时间:2024/05/06 14:53
C#中类型和C/C++的差异
参考书籍《C#图解教程》
参考文档 Microsoft API 和参考目录
学习C#时候发现和C++类型差别还是不小的,这里就写一下差别。
预定义类型
《C#图解教程》P26
单看数值类型也是有不少区别的
C/C++数据类型,点这里
下面讲讲和C/C++不一样的东西
简单类型
非数值类型
- bool,只有这个类型可以直接作为判断值了,就是说类似 0,1,-1这些数值类型都不具备布尔意义了。
- char,是Unicode字符类型,直接赋值65,0x41等是编译不过的,除非强制转换如:char a = (char)65;
数值类型
- decimal,与浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。详见这里decimal(C# 参考)
- sbyte,就是C/C++的 char/signed char 类型。
- byte,就是C/C++的 unsigned char 类型。
所有预定义的简单类型都可以使用Parse静态方法将字符串解析成调用类的类型。
- 非简单类型
- object,C#中所有类都继承至object,包括简单类型。
- string,在C++中,这个是标准库的东西需要导入string头文件。在C#中数组是不可以改变的,即便他有成员方法可以“改变”,那其实都是重新分配了一个新的字符串。要用动态的字符串,那就使用StringBuilder类。
- dynamic,动态,就是可以赋给任何类型,随时变化。
参考查阅:dynamic(C# 参考)
在大多数情况下,dynamic 类型与 object 类型的行为是一样的。 但是,不会用编译器对包含 dynamic 类型表达式的操作进行解析或类型检查。 编译器将有关该操作信息打包在一起,并且该信息以后用于计算运行时操作。 在此过程中,类型 dynamic 的变量会编译到类型 object 的变量中。 因此,类型 dynamic 只在编译时存在,在运行时则不存在。
用户定义类型
这里先不详细讲。共6种可以由用户自己创建的类型: 1. 类类型(class) 2. 结构类型(struct) 3. 数组类型(array) 4. 枚举类型(enum) 5. 委托类型(delegate) 6. 接口类型(interface)值类型和引用类型
类型又分两种:值类型和引用类型,值类型存放在栈里,引用类型放在堆里,引用类型的成员(包括值类型)也是在堆里,堆里的数据在不再访问时由CLR的GC(垃圾收集器,[详见上一篇](http://blog.csdn.net/l773575310/article/details/71079564) )自动清理掉。**引用类型做参数时, 可以在函数内修改引用变量内部的值,但修改不了引用类型参数指向的对象。除非添加ref修饰符在参数前面。**《C#图解教程》P32
可空类型
可空类型可以创建一个**值类型**变量并标记有效无效,(**注意不能从引用类型或其他可空类型创建可空类型**)- 两个重要只读属性
- HasValue,bool类型,判断是否有效(不为null)。
- Value,和声明的变量一样类型,有效时,返回变量的值。
空接合运算符
int? myI = null;Console.WriteLine("myI : {0}",myI ?? 666); //当myI为空时,将666赋值给myI。不为空时保持原值。//等价于: myI == null ? 666 : myI;
可空类型的问号语法其实是种快捷语法,如下两句完全等价。
Null<MyStruct> mSNull = new Nullable<MyStruct>();//上下两句等价MyStruct? mSNull = new MyStruct();
*ps:预定义简单类型(int、short、long、等等),实际上在.NET中都实现为结构
0 0
- C# 入门(2) C#类型与C/C++的差异
- c/c++与c#的类型转换
- 【C#】[C++] C# 与 C++ 之间的类型转换
- C#与C/C++部分基础语法差异
- Oracle的Numer类型与C,C#数据类型对应关系
- Oracle的Numer类型与C,C#数据类型对应关系
- C#与C/C++类型对照表
- C++/C#类型笔记
- C#与C++的差异
- 【C#】C#入门基础
- C与C#的区别
- C与C#的区别
- objective-c 多态 ——动态类型 id 的使用(与 C# 的比较说明)
- C#调用C++dll的类型转换
- C#调用C++DLL的类型对应
- C#调用C的Dll(类型对照)
- C#调用C++dll,C++中char*与C#类型的对应关系
- C, C++,C#的区别与联系
- UnityVR.05如何实现VR第一人称射击行为
- 《Learn Python the hard way》 加分题(1)
- 浅谈Linux下的五种I/O模型
- 定时发邮件
- 机器视觉.形态学图像处理
- C# 入门(2) C#类型与C/C++的差异
- fl2440——按键控制madplay音乐播放器
- kubernetes1.6 安装之证书(一)
- Revit二次开发示例:DisableCommand
- 不使用temp变量来交换两个值??该使用异或吗?
- RecyclerView杂乱整理
- bzoj 1132: [POI2008]Tro (计算几何)
- 拿什么来衡量一个程序员的生产力
- 解决Android Webview 加载一些网页出现白板现象