惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
M
MIT News - Artificial intelligence
MyScale Blog
MyScale Blog
博客园_首页
G
Google Developers Blog
博客园 - 【当耐特】
美团技术团队
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
Vercel News
Vercel News
小众软件
小众软件
博客园 - 司徒正美
雷峰网
雷峰网
T
Tailwind CSS Blog
V
V2EX
博客园 - 三生石上(FineUI控件)
F
Fortinet All Blogs
罗磊的独立博客
量子位
P
Proofpoint News Feed
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog

博客园 - 蹲在路边写代码

8000401a错误解决方案(Office Word,Excel,PowerPoit应用程序无法访问) SQL Server 2005 无法删除用户的解决方法 遍例指定目录及子目录下的所有文件添加进数据库 改善SQL语句的效率的几条原则,不断积累中 一些常用的WebServices 转Javascript的IE和Firefox兼容性汇编 - 蹲在路边写代码 - 博客园 转--使用 Request.QueryString 接受参数时,跟编码有关的一些问题 - 蹲在路边写代码 IE的showModalDialog与FireFox的window.open 父子窗口传值示例 三种常见选项卡效果 - 蹲在路边写代码 - 博客园 C#高级编程学习笔记(五)字符串与正则表达式 C#高级编程学习笔记(四) 内存管理和指针 SQL SELECT 语句完整的执行顺序 C#高级编程学习笔记(三)委托和事件 C#高级编程学习笔记(-)C#基础 对象和类型 继承 构造函数和析构函数的原理及在C#中的运用(转载) CSS在IE与Firefox下的兼容性 CSS Hack 汇总 .NET的ORM工具SubSonic2.03的配置 ASP.NET的页面间传值方法 - 蹲在路边写代码 - 博客园
C#高级编程学习笔记(二)运算符和类型转换
蹲在路边写代码 · 2008-03-25 · via 博客园 - 蹲在路边写代码

五、运算符和类型转换

1、运算符
C#支持的运算符其中4个(sizeof、*、->、&)只能用于不安全代码(绕过C#类型安全性的检查)。
三元运算符(?:)
checked和unchecked运算符:CLR执行溢出检查,如果发生溢出,就抛出异常。
is运算符:检查对象是否与特定的类型兼容(表示对象是该类型,或者派生于该类型)。
as运算符:用于执行引用类型的显示类型转换。
sizeof运算符:确定堆栈中值类型需要的长度(单位是字节)。
typeof运算符:返回一个表示特定类型的System.Type对象。(常用于反射动态查找对象的信息)
可空类型和运算符:程序中使用可空类型,必须考虑null值在与各种运算符一起使用时的影响。通常可空类型与一元或二元运算符一起使用时,如果其中一个操作数或两个操作数都是null,其结果就是null.
空接合运算符(??):为处理可空类型和引用类型时表时Null值的可能性提供一种快捷方式。
运算符的优先级:
组          运算符
初级运算符   ()、[]、x++、x--、new、typeof、sizeof、checked、unchecked
一元运算符   +、-、!、~、++x、--x、数据类型转换
乘除运算符   *、/、%
加减运算符   +、-
移位运算符   << >>
关系运算符   < > <= >= is as
比较运算符   == !==
按位AND运算符 &
按XOR运算符   |
按OR运算符   ^
布尔AND运算符  && 
布尔OR运算符  ||
三元运算符   ?:
赋值运算符   = += -= *= /= %= &= |= ^= <<= >>= >>>=

2、类型的安全性
类型转换:隐式转换,显式转换
装箱和拆箱:装箱是值类型转换为引用类型,拆箱是引用类型转换为值类型。
3、对象的相等比较
引用类型的相等比较:ReferenceEquals()方法、虚拟的Equals()方法、静态的Equals()方法、比较运算符==
值类型的相等比较:Equals()对值类型进行合适的相等测试,如果值类型包含作为字段的引用类型,就需要重写Equals(),以便为这些字段提供合适的语义,因为Equals的默认版本仅比较它们的地址。
4、运算符重载
重载运算符允许生成可读性更高、更直观的代码,包括:
在数学领域中,几乎包括所有的数学对象:坐标、矢量、矩阵、张量和函数等。如果编写一个程序执行数学或物理建模,肯定会用类表示这些对象。
图形程序在计算屏幕上的位置时,也使用数学或相关的坐标对象。
表示大量金钱的类(例如,在财务程序中)
字处理或文本分析程序也有表示语句、子句等的类,可以使用运算符把语句连接在一起(这是字符串连接的一种比较复杂的版本)

C#要求所有的运算符重载都声明为public和static,这表示它们和它们的类或结构相关联,而不是与实例相关联,所以运算符重载的代码体不能访问非静态类成员,也不能访问this标识符.
添加更多运算符
C#不允许重载=运算符,但如果重载+运算符,编译器会自动使用+运算符的重载来执行+=运算符的操作。-=、&=、*=、/=赋值运算符也遵循此规则。
比较运算符
重载==和!=时,还应重载System.Object中继承的Equals()和GetHashCode()方法,否则会产生一个编译警告。原因是Equals()方法应执行与==运算符相同的相等逻辑。

5、用户定义的数据类型转换
类之间的数据类型转换:两个限制:
如果某个类直接或间接继承了另一个类,就不能在这两个类之间进行类型转换(这些类型的类型转换已经存在)。
数据类型转换必须在源或目标数据类型定义的内部定义。