C# 操作符

C# 操作符

    • 一、操作符概览
    • 二、优先级与运算顺序
    • 三、各类操作符的实例

一、操作符概览

在这里插入图片描述

  • 操作符(运算符)的本质是函数的简记法

  • 操作符不能脱离与它关联的数据类型

    int x = 5;
    int y = 4;
    int z = x / y;
    Console.WriteLine(z);//输出1double a = 5.0;
    double b = 4.0;
    double c = a / b;
    Console.WriteLine(c);//输出1.25
    

二、优先级与运算顺序

  • 按表格顺序从上到下优先级依次降低

  • 同优先级操作符从左到右

  • 赋值操作符从右到左

    int x = 100;
    int y = 200;
    int z = 300;
    x += y += z;
    Console.WriteLine(x);//600
    Console.WriteLine(y);//500
    Console.WriteLine(z);//300
    

三、各类操作符的实例

  1. x.y成员访问操作符
  • 访问外层名称空间的子集名称空间

  • 访问名称空间的类型

  • 访问类型的静态成员

    System.IO.File.Create("D:\\HelloWorld");
    
    • System.IO:外层名称空间的子集名称空间
    • IO.File:名称空间的类型
    • File.Create:类型的静态成员
  • 访问对象的成员

    Form myForm = new Form();
    myForm.Text = "Hello, World!";
    myForm.ShowDialog();
    
  1. f(x)方法调用操作符

  2. a[x]元素访问操作符

    //访问数组
    int[] myArray1 = new int[10];
    int[] myArray2 = new int[] { 1,2,3,4,5};
    int[] myArray3 = new int[5] { 1, 2, 3, 4, 5 };
    Console.WriteLine(myArray2[0]);//访问字典
    class Program
    {static void Main(string[] args){Dictionary<string, Student> stuDic = new Dictionary<string, Student>();for (int i = 0; i < 100; i++){Student student = new Student();student.Name = "s_" + i.ToString();student.Score = i;stuDic.Add(student.Name, student);}Student number6 = stuDic["s_6"];Console.WriteLine(number6.Score);//6}}class Student
    {public string Name;public int Score;
    }
  3. x++后置自增 ,x--后置自减 。遇到赋值,先赋值,后自增/自减

            int x = 100;int y = x++;Console.WriteLine(x);//101Console.WriteLine(y);//100
    
  4. new:在内存中创造一个类的实例,(1)立即调用这个实例的构造器,(2)调用实例的初始化器

            Form myForm1 = new Form();Form myForm2 = new Form() { Text = "Hello" };
    
    		//匿名类型var person = new { Name = "Mr.Ok", Age = 34 };Console.WriteLine(person.Name);//Mr.OkConsole.WriteLine(person.Age);//34
    
  5. typeof操作符:查看一个类型的内部结构

            Type t = typeof(int);Console.WriteLine(t.Namespace);//SystemConsole.WriteLine(t.FullName);//System.Int32Console.WriteLine(t.Name);//Int32int c = t.GetMethods().Length;foreach (var mi in t.GetMethods()){Console.WriteLine(mi.Name);//CompareTo、 Equals、GetHashCode ......}Console.WriteLine(c);//53
    
  6. default:获取一个类型的默认值

            //结构体类型int x = default(int);Console.WriteLine(x);//0
    
            //引用类型Form myForm = default(Form);Console.WriteLine(myForm == null);//true
    
    class Program
    {static void Main(string[] args){//枚举类型Level1 level1 = default(Level1);Console.WriteLine(level1); //LowLevel2 level2 = default(Level2);Console.WriteLine(level2); //MediumLevel3 level3 = default(Level3);Console.WriteLine(level3); //逻辑出错,输出0}}
    enum Level1
    {Low,Medium,High}
    enum Level2
    {Low = 1,Medium = 0,High = 2}enum Level3
    {Low = 2,Medium = 1,High = 3}
    
  7. checked/unchecked:检查一个值是否有溢出

    		//第一种用法uint x = uint.MaxValue;uint y = x+1;Console.WriteLine(x);//4294967295Console.WriteLine(y);//0try{uint z = checked(x + 1);Console.WriteLine(z);}catch (OverflowException ex){Console.WriteLine("There's overflow");//There's overflow}
    
    		//第二种用法uint x = uint.MaxValue;uint y = x + 1;Console.WriteLine(x);//4294967295Console.WriteLine(y);//0checked{try{uint z = x + 1;Console.WriteLine(z);}catch (OverflowException ex){Console.WriteLine("There's overflow");//There's overflow}}
    
  8. sizeof: 获取基本类型在内存中占的字节数

            int x = sizeof(int);Console.WriteLine(x);//4
    
    class Program
    {static void Main(string[] args){unsafe {int y = sizeof(Student);Console.WriteLine(y);}}
    }class Student {int ID;long Score;
    }
    
  9. ->:箭头操作符。会直接操作内存,因此需要放在不安全的上下文使用。只能操作结构体类型。

    class Program
    {static void Main(string[] args){unsafe{Student stu;stu.ID = 1;stu.Score = 60;Student* pStu = &stu;pStu->Score = 90;Console.WriteLine(stu.Score);//90}}
    }struct Student
    {public int ID;public long Score;
    }
    
  10. *x

    class Program
    {static void Main(string[] args){unsafe{Student stu;stu.ID = 1;stu.Score = 60;Student* pStu = &stu;pStu->Score = 90;(*pStu).Score = 1000;Console.WriteLine(stu.Score);//100}}
    }struct Student
    {public int ID;public long Score;
    }
    
  11. -x:相反数操作符,在二进制的基础上,按位取反,再加1

     int x = int.MinValue;int y = -x;Console.WriteLine(x)//-2147483648Console.WriteLine(y);//-2147483648string xStr = Convert.ToString(x,2).PadLeft(32,'0');//10000000000000000000000000000000string yStr = Convert.ToString(y, 2).PadLeft(32, '0');//10000000000000000000000000000000Console.WriteLine(xStr);Console.WriteLine(yStr);
    
  12. (T)x:强制类型转换操作符

    • 隐式类型转换
      • 不丢失精度的转换

        //短整型转换成长整型
        int x = int.MaxValue;
        long y = x;
        Console.WriteLine(y);
        
        目标
        sbyteshort、int、long、float、double 或 decimal
        byteshort、ushort、int、uint、long、ulong、float、double 或 decimal
        shortint、long、float、double 或 decimal
        ushortint、uint、long、ulong、float、double 或 decimal
        intlong、float、double 或 decimal
        uintlong、ulong、float、double 或 decimal
        longfloat、double 或 decimal
        charushort、int、uint、long、ulong、float、double 或 decimal
        floatdouble
        ulongfloat、double 或 decimal
      • 子类向父类的转换

      • 装箱

    • 显式类型转换
      • 有可能丢失精度(甚至发生错误)的转换,即cast

        int x = 100;
        short y = (short)x;
        Console.WriteLine(y);
        
        目标
        sbytebyte、ushort、uint、ulong 或 char
        byteSbyte 或 char
        shortsbyte、byte、ushort、uint、ulong 或 char
        ushortsbyte、byte、short 或 char
        intsbyte、byte、short、ushort、uint、ulong 或 char
        uintsbyte、byte、short、ushort、int 或 char
        longsbyte、byte、short、ushort、int、uint、ulong 或 char
        ulongsbyte、byte、short、ushort、int、uint、long 或 char
        charsbyte、byte 或 short
        floatsbyte、byte、short、ushort、int、uint、long、ulong、char 或 decimal
        doublesbyte、byte、short、ushort、int、uint、long、ulong、char、float 或 decimal
        decimalsbyte、byte、short、ushort、int、uint、long、ulong、char、float 或 double
      • 拆箱

      • 使用Convert类

      • ToString方法与各数据类型的Parse/TryParse方法

    • 自定义类型转换操作符
    class Program
    {static void Main(string[] args){Stone stone = new Stone();stone.Age = 5000;Monkey wukong = (Monkey)stone;Console.WriteLine(wukong.Age);//10}
    }class Stone
    {public int Age;public static explicit operator Monkey(Stone stone){Monkey m = new Monkey();m.Age = stone.Age / 500;return m;}
    }
    class Monkey
    {public int Age;
    }
    
  13. /:除法操作符

            int x1 = 5;int y1 = 4;Console.WriteLine(x1 / y1);//1double x2 = 5.0;double y2 = 4.0;Console.WriteLine(x2 / y2);//1.25
            //被除数为0int x1 = 5;int y1 = 0;Console.WriteLine(x1 / y1);//报错double x2 = 5.0;double y2 = 0;Console.WriteLine(x2 / y2);//∞
  1. is:检验一个对象是不是某个类型的对象
    class Program{static void Main(string[] args){Teacher t1 = new Teacher();Teacher t2 = null;var result1 = t1 is Teacher;var result2 = t1 is Hunam;var result3 = t2 is Teacher;Console.WriteLine(result1);//TrueConsole.WriteLine(result2);//TrueConsole.WriteLine(result3);//False}}class Animal {public void Eat() {Console.WriteLine("Eating...");}}class Hunam:Animal{public void Think(){Console.WriteLine("Thinking...");}}class Teacher : Hunam{public void Teach(){Console.WriteLine("Teaching...");}}
  1. as
   object obj = new Teacher();Teacher t = obj as Teacher;if (t != null){t.Teach();//Teaching...}
  1. &&||,注意短路效应
            int x = 3;int y = 4;int a = 3;if (x > y && a++ > 3){Console.WriteLine("Hello");}Console.WriteLine(a);//3
            int x = 5;int y = 4;int a = 3;if (x > y && a++ > 3){Console.WriteLine("Hello");}Console.WriteLine(a);//4
            int x = 5;int y = 4;int a = 3;if (x > y || a++ > 3){Console.WriteLine("Hello");//Hello}Console.WriteLine(a);//3
            int x = 3;int y = 4;int a = 3;if (x > y || ++a > 3){Console.WriteLine("Hello");//Hello}Console.WriteLine(a);//4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/79279.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/79279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++设计模式:面向对象的八大设计原则之四

里氏替换原则&#xff08;Liskov Substitution Principle&#xff0c;LSP&#xff09;是面向对象设计中的一个重要原则&#xff0c;它指出子类必须能够替换它的基类&#xff0c;并且程序的行为不会发生改变。也就是说&#xff0c;在任何使用基类对象的地方&#xff0c;都可以透…

网络通信领域的基础或流行协议

一、TCP(传输控制协议) 1. 宏观介绍 TCP:全称“Transmission Control Protocol”——传输控制协议,是互联网最基础的传输协议之一。传输层协议,提供面向连接、可靠的字节流传输服务。它通过三次握手建立连接、四次挥手断开连接,确保数据有序、完整地传输作用:让两个设备…

【教学类-34-10】20250503(通义万相)4*3蝴蝶拼图(圆形、三角、正方、半圆的凹凸小块+参考图灰色)

背景需求 2023年从网站上搜索拼图代码,陆续改良了圆形、三角形、菱形凹凸) 【教学类-34-05】20230425拼图(“圆角”凹凸拼图)3*4格子(中班主题《个别化拼图》偏美术)_拼图的槽叫什么形状-CSDN博客文章浏览阅读1.1k次。【教学类-34-05】20230425拼图(“圆角”凹凸拼图)…

bellard.org‌ : QuickJS 如何使用 qjs 执行 js 脚本

参阅上一篇&#xff1a;Fabrice Bellard&#xff08;个人网站&#xff1a;‌bellard.org‌&#xff09;介绍 Fabrice Bellard&#xff08;个人网站&#xff1a;‌bellard.org‌&#xff09;是计算机领域最具影响力的程序员之一&#xff0c;其贡献跨越多个技术领域并持续推动开…

数据结构---

案例一 1.随机生成n个工人工时&#xff0c;100以内&#xff0c;工号分别为2021101到2021100n 2.以工时数为关键字分别使用选择排序、冒泡排序、插入排序进行升序排序。 3.把排序后的结果输出&#xff0c;包括工号工时数 4.比较三种算法对相同的n值数组排序所花的时间 代码如下&…

Python硬核革命:从微控制器到FPGA的深度开发指南

1. 重新定义硬件开发:Python的颠覆性突破 传统硬件开发长期被C/C++和Verilog/VHDL统治,但Python正通过两条路径改变这一格局: 1.1 微控制器领域的MicroPython革命 完整Python 3.4语法支持,运行在资源受限的MCU上(最低要求:64KB ROM,16KB RAM) 直接内存访问能力,突破…

基于springboot+vue的宠物共享平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat12开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.3.9 系统展示 宠物寄养管理 宠…

day 11 超参数调整

一、内参与外参&#xff08;超参数&#xff09; 内参是模型为了适应训练数据而自动调整的&#xff0c;是模型内部与训练数据紧密相关的因素&#xff0c;不同的训练数据会导致模型学习到不同的参数值&#xff0c;这些参数在模型训练完成后就固定下来。 超参数是在模型训练前需…

快速搭建对象存储服务 - Minio,并解决临时地址暴露ip、短链接请求改变浏览器地址等问题

其他文章 服务容错治理框架resilience4j&sentinel基础应用---微服务的限流/熔断/降级解决方案-CSDN博客 conda管理python环境-CSDN博客 快速搭建对象存储服务 - Minio&#xff0c;并解决临时地址暴露ip、短链接请求改变浏览器地址等问题-CSDN博客 大模型LLMs的MCP入门-…

朴素贝叶斯分类器

朴素贝叶斯分类器 朴素贝叶斯是一种基于密度估计的分类算法&#xff0c;它利用贝叶斯定理进行预测。该算法的核心假设是在给定类别的情况下&#xff0c;各个特征之间是条件独立的&#xff0c;尽管这一假设在现实中通常不成立&#xff0c;但朴素贝叶斯分类器依然能够生成对有偏…

在 Trae CN IDE 中配置 Python 3.11的指南

在 Trae CN IDE 中配置 Python 3.11的指南 下载 python 3.11 安装 Python 3.11 首先&#xff0c;我们需要确保安装了 Python 3.11。可以从Python 官方网站下载适合你操作系统的版本。 链接 如果你已经安装了 Python 3.11&#xff0c;可以通过以下命令确认&#xff1a; 文…

MQTT 协议与 HTTP 协议的区别

在现代的网络通信中&#xff0c;MQTT 协议和 HTTP 协议都扮演着重要的角色&#xff0c;但它们有着不同的特点和适用场景。下面我们就从多个方面来详细探讨它们之间的区别。 一.协议设计理念 1. MQTT 协议 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;即…

Postgresql源码(145)优化器nestloop参数化路径评估不准问题分析

相关 《Postgresql源码&#xff08;133&#xff09;优化器动态规划生成连接路径的实例分析》 1 问题 最近遇到一个问题&#xff0c;评估行数和真实行数存在较大差距&#xff0c;导致计划不准的问题。 nestloop内表评估是根据外表的参数来的。因为外表驱动表每取一条&#xff…

HTML与CSS实现风车旋转图形的代码技术详解

在前端开发中&#xff0c;HTML和CSS是构建网页的基础技术。通过巧妙运用HTML的结构搭建和CSS的样式控制&#xff0c;我们能够实现各种精美的视觉效果。本文将对一段实现旋转图形效果的HTML和CSS代码进行详细解读&#xff0c;剖析其中的技术要点。 一、运行效果 HTML与CSS实现风…

linux下,ollama会把模型文件保存在哪里?

文章目录 运行ollama,有两种形式,估计得分开讨论首先是使用自动启动的ollama:先跑个“小一点的大模型”但是现在模型文件存在哪儿呢?运行ollama,有两种形式,估计得分开讨论 我们用两种方式,来运行ollama。 首先是使用自动启动的ollama: ps -aux | grep ollama系统自…

鼎讯信通 智能通信干扰设备:多频段多模态信号压制解决方案

在万物互联时代&#xff0c;通信安全已成为现代社会的核心基础设施防护重点。面对日益复杂的电磁环境挑战&#xff0c;新一代智能通信干扰设备通过技术创新实现了信号压制能力的革命性突破。本文将深入解析该设备的八大核心功能与技术特性&#xff0c;展现其在商业通信保障、工…

【2025软考高级架构师】——案例分析总结(13)

摘要 本文对2025年软考高级架构师的考纲及案例分析进行了总结。内容涵盖系统规划、架构设计、系统建模、安全架构、可靠性分析、大数据架构等多方面知识点&#xff0c;还涉及软件质量特性、系统流程图与数据流图、嵌入式系统架构、分布式系统设计等考查内容&#xff0c;详细列…

js单调栈解题模板

模板 function solve(arr) {const stack [];const result new Array(arr.length).fill(默认值);for (let i 0; i < arr.length; i) {while (stack.length && 比较条件(arr[i], arr[栈顶])) {const top stack.pop();result[top] 计算结果(i, top); }stack.push…

[蓝桥杯真题题目及解析]2025年C++b组

移动距离&#xff08;填空&#xff09;** 小明初始在二维平面的原点&#xff0c;他想前往坐标 (233,666)。在移动过程中&#xff0c;他只能采用以下两种移动方式&#xff0c;并且这两种移动方式可以交替、不限次数地使用&#xff1a; 水平向右移动&#xff0c;即沿着 x 轴正方…

【ICMP协议深度解析】从网络诊断到安全实践

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键报文类型说明协议版本对比 二、实战演示环境配置要求核心实验实现实验1&#xff1a;标准ping流程实验2&#xff1a;traceroute路径发现实验3&#xff1a;自定义ICMP…