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
英文地址,請注明出處:http://en.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…