码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C# 图解教程 第5版 —— 第9章 表达式和运算符


    文章目录

      • 9.1 表达式(*)
      • 9.2 字面量
        • 9.2.1 整数字面量
        • 9.2.2 实数字面量
        • 9.2.3 字符字面量
        • 9.2.4 字符串字面量
      • 9.3 求值顺序
        • 9.3.1 优先级
        • 9.3.2 结合性
      • 9.4 简单算术运算符
      • 9.5 求余运算符
      • 9.6 关系比较运算符和相等比较运算符
      • 9.7 递增运算符和递减运算符(*)
      • 9.8 条件逻辑运算符(*)
      • 9.9 按位逻辑运算符(*)
      • 9.10 移位运算符(*)
      • 9.11 赋值运算符(*)
      • 9.12 条件运算符(*)
      • 9.13 一元算术运算符(*)
      • 9.14 用户定义的类型转换
      • 9.15 运算符重载
        • 9.15.1 运算符重载的示例(*)
        • 9.15.2 运算符重载的限制
      • 9.16 typeof 运算符
      • 9.17 nameof 运算符
      • 9.18 其他运算符

    9.1 表达式(*)

    9.2 字面量

    9.2.1 整数字面量

    • 十六进制整数:以 0x 或 0X 开始。
    • 二进制整数:以 0b 或 0B 开始。
    image-20231026194657016
    图9.1 整数字面量的格式

    ​ 十六进制和二进制记法用前缀指定,实际的数据类型用后缀指定。

    表9.1 整数字面量的后缀
    image-20231026194806035

    ​ 可以在数字字面量中插入分隔符以看清数字大小:

    Console.WriteLine("5_000_000_000 is much easier to read than 5000000000");
    
    • 1

    9.2.2 实数字面量

    image-20231026195103342
    图9.2 实数字面量的格式
    表9.2 实数字面量的后缀
    image-20231026195144225

    9.2.3 字符字面量

    ​ 字符字面量包括:

    • 单个字符:char。
    • 简单转义序列:反斜杠 + 单个字符。
    • 十六进制转义序列:反斜杠 + x/X + 4 位十六进制数字。
    • Unicode 转义序列:反斜杠 + u/U + 4 位十六进制数字。
    char c1 = 'd';      // 单个字符
    char c2 = '\n';     // 简单转义序列
    char c3 = '\x0061'; // 十六进制转义序列
    char c4 = '\u005a'; // Unicode 转义序列
    
    • 1
    • 2
    • 3
    • 4

    9.2.4 字符串字面量

    ​ 字符串字面量类型包括两种:

    1. 常规字符串字面量。

      可以包含上述 4 种字符字面量。

    2. 逐字字符串字面量。

      • 以 @ 字符为前缀。
      • 字符串中的转义序列不会被求值。
    image-20231026200219671 image-20231026200249679 image-20231026200307102
    图9.3 逐字字符串字面量示例

    ​ 说明:编译器让相同的字符串字面量共享堆中的同一内存位置以节约内存。

    9.3 求值顺序

    9.3.1 优先级

    表9.3 运算符优先级:从高到低
    image-20231026200928386

    9.3.2 结合性

    表9.4 运算符结合性总结
    image-20231026201032831

    9.4 简单算术运算符

    表9.5 简单算术运算符
    image-20231026201130164

    9.5 求余运算符

    表9.6 求余运算符
    image-20231026201232186

    ​ 求余运算符还可以用于实数以得到实余数:

    image-20231026201344103 image-20231026201351887
    图9.4 求余运算符计算实余数

    9.6 关系比较运算符和相等比较运算符

    image-20231026201459909
    图9.5 关系比较运算符和相等比较运算符

    比较操作和相等性操作

    • **浅比较:**对于大多数引用类型来说,比较相等性时,只比较它们的引用。
      • 如果指向相同的引用对象,则为 true;否则为 false。
      • 因此,若两个不同的引用指向的对象值内容相同,也返回 false。
    image-20231026201825975
    图9.6 比较引用类型的相等性
    • **深比较:**string 类型对象不使用浅比较,而是比较字符值是否相等。
      • 如果两个字符串有相同的长度和内容(区分大小写),则为 true;否则为 false;
      • 即使两个字符串占用不同的内存区域,如果值相同,也会返回 true。

    ​ 委托也是引用类型,也使用深比较。

    9.7 递增运算符和递减运算符(*)

    9.8 条件逻辑运算符(*)

    9.9 按位逻辑运算符(*)

    9.10 移位运算符(*)

    9.11 赋值运算符(*)

    9.12 条件运算符(*)

    9.13 一元算术运算符(*)

    9.14 用户定义的类型转换

    隐式转换

    ​ 使用 public 和 static 修饰符,implicit 表明为隐式转换:

    image-20231026203218549
    图9.7 定义隐式转换

    显示转换

    ​ 和隐式转换一样,但使用 explicit 而不是 implicit。图 9.8 使用箭头标出了不同之处:

    image-20231026203349461
    图9.8 定义显示转换

    9.15 运算符重载

    • 运算符重载只能用于类和结构。
    • 使用 operator x 重载运算符 x。
      • 一元运算符重载方法只带一个单独的 class 或 struct 参数。
      • 二元运算符重载方法带两个参数,至少有一个需要为 class 或 struct。
    image-20231026203647301
    图9.9 一元/二元运算符重载区别

    ​ 运算符重载的说明:

    • 必须同时使用 public 和 static。
    • 运算符方法必须是要操作的类或结构的成员。
    image-20231026203844526
    图9.10 运算符重载示例

    9.15.1 运算符重载的示例(*)

    9.15.2 运算符重载的限制

    ​ 可重载的一元运算符:+、-、!、~、++、–、true、false。

    ​ 可重载的二元运算符:+、-、*、/、%、&、|、^、<<、>>、==、!=、>、<、>=、<=。

    ​ 运算符重载不能:

    • 创建新运算符。
    • 改变运算符的语法。
    • 重新定义运算符如何处理预定义类型。
    • 改变运算符的优先级或结合性。

    ​ 对于 ++ 和 – 运算符,重载只能提供一个方法体。当对对象使用前置或后置运算时,编译器将做出不同操作的处理:

    • 前置运算:
      • 直接在对象上执行重载代码。
      • 返回对象。
    • 后置运算:
      • 首先浅拷贝对象。
      • 在拷贝对象上执行重载代码。
      • 返回拷贝对象。

    ​ 因此,对引用类型(class)使用后置操作,返回结果将和前置操作一样,因为浅拷贝引用指向的对象就是原对象。但是对值类型(struct)使用后置操作不会出现这种现象。

    ​ 最好对 struct 使用后置递增 / 递减,而不是 class。

    9.16 typeof 运算符

    ​ typeof 运算符返回参数对应的 System.Type 对象。

    9.17 nameof 运算符

    ​ 即使参数使用完全限定名,nameof 运算符也只返回其参数的非限定名称。

    image-20231026233007302
    图9.11 nameof 运算符示例

    9.18 其他运算符

    • 空接合运算符
    • 空条件运算符
  • 相关阅读:
    设计模式的思考
    Mysql8安装+重装的数据备份方法【提供Mysql8.0.27版本的压缩包】
    剑指offer——JZ82 二叉树中和为某一值的路径(一) 解题思路与具体代码【C++】
    金九银十求职季:分享90%以上你可能会遇到的经典面试题(测试人必备)
    【Java】main方法的深入理解
    Java基础
    17.Excel vba开发-根据分数判断等级
    将json数据导入到ES集群——解决方案对比&填坑日记
    面向对象的三大特质之继承
    数据中台实战(06)-数据模型无法复用,归根结底还是设计问题
  • 原文地址:https://blog.csdn.net/zheliku/article/details/134067034
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号