c#入門學習筆記

来源:https://www.cnblogs.com/JaminYe/archive/2019/07/25/11246738.html
-Advertisement-
Play Games

Hello World //列印語句 Console.WriteLine("Hello World"); //暫停 Console.ReadKey(); 數據類型 1.值類型 byte,char,short,int,long,bool,decimal,float,double,sbyte,uint, ...


  1. Hello World

     //列印語句
     Console.WriteLine("Hello World");
     //暫停
     Console.ReadKey();
    
  2. 數據類型
    1.值類型 byte,char,short,int,long,bool,decimal,float,double,sbyte,uint,ulong,ushort
    2.引用類型: 儲存的不是值實際數據而是一個記憶體地址 object、dynamic 和 string。
    3.對象類型:Object 類型檢查是在編譯時發生的
    4.動態類型: 可以存儲任何類型的值在動態數據類型變數中,類型檢查在運行時
    5.字元串(String)類型
    6.指針類型(Pointer types)

  3. 類型轉換

    1. 隱式轉換
    2. 顯式轉換
    3. Toxxx方法
  4. 變數

  5. 常量

    1. 整數常量
      • 整數常量可以是十進位、八進位或十六進位的常量。首碼指定基數:0x 或 0X 表示十六進位,0 表示八進位,不帶首碼則預設表示十進位。
      • 整數常量也可以帶一個尾碼,尾碼是 U 和 L 的組合,U 表示無符號整數(unsigned),L 表示長整數(long)。尾碼可以是大寫,也可以是小寫,U 和 L 的順序任意。
    2. 浮點常量(小數必須包含整數)
    3. 字元常量
    4. 字元串常量
    5. 定義常量
  6. 運算符

    1. 算數運算符
    2. 關係運算符
    3. 邏輯運算符
    4. 位運算符
    5. 賦值運算符
    6. 其他運算符
      1. sizeof():數據類型的大小
      2. typeof():返回 class的類型。
      3. &: 返回變數的地址
      4. *:變數的指針
      5. ?: :三元表達式
      6. is:判斷對象是否為某一類型
      7. as: 強制轉換,即使失敗也不會拋出異常
  7. 判斷:

    1. if
    2. switch
  8. 迴圈:

    1. while迴圈
    2. for/foreach
    3. do…while
  9. 封裝:

    1. public:允許一個類將其成員變數和成員函數暴露給其他的函數和對象。任何公有成員可以被外部的類訪問
    2. private:允許一個類將其成員變數和成員函數對其他的函數和對象進行隱藏。只有同一個類中的函數可以訪問它的私有成員。即使是類的實例也不能訪問它的私有成員。
    3. protected:該類內部和繼承類中可以訪問。
    4. internal:同一個程式集的對象可以訪問。
    5. protected internal:3 和 4 的並集,符合任意一條都可以訪問。
  10. 可空類型

    • //預設值為0
      int a;
      //預設值為null
      int? b=123;
      //如果b為null就賦值2否則c=b
      int c=  b?? 2;
      Console.WriteLine("c的值為{0}", c);
      Console.ReadLine();
      
  11. 數組

    //初始化數組逐個賦值
    int[] arr = new int[10];
    arr[0] = 12312;
    //初始化數組並賦值
    int[] arr1 = { 321, 312, 12312, 12312312, 12312312 };
    //使用for迴圈賦值
    for (int i = 0; i < 10; i++)
    {
    arr[i] = i + 100;
    }
    //使用forEach取值
    foreach (int i in arr)
    {
    Console.WriteLine("元素的值為{0}", i);
    }
    
  12. 結構體

    struct Books{
    public string id;
    public string name;
    public string price;
    }
    static void Main()
    {
    Books book1;
    book1.id = "123";
    book1.name = "aaa";
    book1.price = "23131";
    Console.WriteLine("書信息:書id{0},書名{1},書價格{2}",book1.id,book1.name,book1.price);
    Console.ReadLine();
    }
    
    • 類與結構的不同點
      1. 類是引用類型,結構是值類型
      2. 結構不支持繼承
      3. 結構不能聲明預設的構造函數
      4. 結構體中無法實例屬性或賦初始值
    • 類與結構的選擇
      1. 當我們描述一個輕量級對象的時候,結構可提高效率,成本更低。數據保存在棧中,訪問速度快
      2. 當堆棧的空間很有限,且有大量的邏輯對象或者表現抽象和多等級的對象層次時,創建類要比創建結構好一些;
  13. 枚舉

    //枚舉列表中的每個符號代表一個整數值,一個比它前面的符號大的整數值,可自定義每個符號
    enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };
    static void Enum()
    {
    int a = (int)Days.Wed;
    Console.WriteLine(a);
    Console.ReadLine();
    }
    
  14. 析構函數

    class Test
    {
        string id;
        public Test()
        {
            Console.WriteLine("構造函數");
        }
        ~Test()
        {
            Console.WriteLine("析構函數");
        }
        static void Main()
        {
            Test test = new Test { id = "123" };
            Console.WriteLine("id為{0}", test.id);
            Console.ReadLine();
        }
    
    }
    
  15. 多態性

    1. 通過在類定義前面放置關鍵字 sealed,可以將類聲明為密封類。當一個類被聲明為 sealed 時,它不能被繼承。抽象類不能被聲明為 sealed。
    2. 當有一個定義在類中的函數需要在繼承類中實現時,可以使用虛方法。虛方法是使用關鍵字 virtual 聲明的。虛方法可以在不同的繼承類中有不同的實現。
  16. 運算符的重載

    class Test2
        {
            public int length;
            //運算符重載  
            public static Test2 operator +(Test2 a, Test2 b)
            {
                Test2 test = new Test2 { length = a.length - b.length };
                return test;
            }
            static void Main(string[] args)
            {
                Test2 test = new Test2 { length = 12 };
                Test2 test1 = new Test2 { length = 213 };
                Test2 t = test + test1;
                Console.WriteLine("t的值{0}", t.length);
                Console.ReadLine();
            }
        }
    
  17. 預處理器指令

    1. define 預處理器

    2. 條件指令
  18. 異常處理

    1. try catch finally
    2. 常見異常:
      1. IO異常
      2. 空對象
      3. 類型轉換
      4. 除以0
  19. 文件的輸入與輸出

     //位元組流讀取文件
     static void Main(string[] args)
     {
     StreamReader streamReader =new StreamReader(@"D:\Document\test.txt");
     string line;
     //讀取文件內容
     while ((line = streamReader.ReadLine()) != null)
     {
     //列印出來
     Console.WriteLine(line);
     }
     Console.ReadLine();
     }
    
  20. windows文件系統操作

     static void Main(string[] args) {
            GetFile(@"D:\ProgramFiles");
            Console.ReadLine();
        }
        //獲得某文件夾下的文件名與大小
        static void GetFile(String path) {
            DirectoryInfo directoryInfo = new DirectoryInfo(path);
            DirectoryInfo[] directoryInfo1 = directoryInfo.GetDirectories();
            FileInfo[] files = directoryInfo.GetFiles();
            if(directoryInfo1!=null) {
                foreach(DirectoryInfo directoryInfo2 in directoryInfo1) {
                    if(directoryInfo2.Name!="app") {
                        GetFile(path+@"\"+directoryInfo2.Name);
                    }
                }
            }
            if(files!=null) {
                foreach(FileInfo file in files) {
                    Console.WriteLine("文件名:{0},文件大小{1}",file.Name,file.Length);
                }
            }
        }
    
  21. 特性

    1. 預定義特性
      1.AttributeUsage
      2.Conditional
      3.Obsolete: [Obsolete("過時了")]編譯器會給出警告信息[Obsolete("過時了",true)]編譯器會給出錯誤信息

    2. 自定義特性

  22. 委托

    delegate void ConsoleWrite1();
    namespace ConsoleApp1 {
        class Program {
    
            static void Main(string[] args) {
                ConsoleWrite1 consoleWrite1 = new ConsoleWrite1(ConsoleWrite);
                consoleWrite1();
                Console.ReadLine();
            }
            static void ConsoleWrite() {
                Console.WriteLine("測試");
            }
    
    • 委托的用途

               static FileStream fs;
        static StreamWriter sw;
        // 委托聲明
        public delegate void printString(string s);
      
        // 該方法列印到控制台
        public static void WriteToScreen(string str) {
            Console.WriteLine("The String is: {0}",str);
        }
        // 該方法列印到文件
        public static void WriteToFile(string s) {
            fs=new FileStream(@"D:\Document\test.txt",
            FileMode.Append,FileAccess.Write);
            sw=new StreamWriter(fs);
            sw.WriteLine(s);
            sw.Flush();
            sw.Close();
            fs.Close();
        }
        // 該方法把委托作為參數,並使用它調用方法
        public static void sendString(printString ps) {
            ps("Hello World");
        }
        static void Main(string[] args) {
            printString ps1 = new printString(WriteToScreen);
            printString ps2 = new printString(WriteToFile);
            sendString(ps1);
            sendString(ps2);
            Console.ReadKey();
        }
      
    1. 指針變數
       static unsafe void Test12() {
       int i = 0;
       int* p = &i;
       Console.WriteLine("i的值為{0},記憶體地址為{1}",i,(int)p);
       Console.WriteLine();
       }
      
    2. 傳遞指針作為方法的參數
           static unsafe void Main() {
           int var1 = 10;
           int var2 = 20;
           Console.WriteLine("var1:{0},var2:{1}",var1,var2);
           int* a = &var1;
           int* b = &var2;
           Swap(a,b);
           Console.WriteLine("var1:{0},var2:{1}",var1,var2);
           Console.ReadLine();
       }
       static unsafe void Swap(int* a,int* b) {
           int temp =*a;
           *a=*b;
           *b=temp;
       }
      
    3. 使用指針訪問數組元素
                static unsafe void array() {
                       int[] list = { 10,100,200 };
                       fixed (int* ptr = list)
                         /* 顯示指針中數組地址 */
                         for(int i = 0;i<3;i++) {
                             Console.WriteLine("Address of list[{0}]={1}",i,(int)(ptr+i));
                         Console.WriteLine("Value of list[{0}]={1}",i,*(ptr+i));
               }
                 Console.ReadKey();
      
  23. out參數:一個方法返回多個不同類型的參數

      static void Main() {
           string s="asd";
           int i=Test7(out s);
           Console.WriteLine(s);
           Console.WriteLine(i);
           Console.ReadLine();
    
       }
    
       public static int Test7(out string a) {
           a="asddddddddddd";
           return 1;
       }
    
  24. params參數
     static void Main() {
            Params(213,31231,12312,13231,123,1312,312,312,321,3,12,312,12);
        }
        static void Params(params int[] array) {
            int max = array[0];
            for(int i = 0;i<array.Length;i++) {
                if(array[i]>max) {
                    max=array[i];
                }
            }
            Console.WriteLine("最大值為{0}",max);
            Console.ReadLine();
        }
    
  25. ref參數
    static void Main() {
            int i = 30;
            Ref(ref i);
            Console.WriteLine(i);
            Console.ReadKey();
        }
        static void Ref(ref int a) {
            a+=500;
        }
    
  26. 連接資料庫
        static void MysqlConnection() {
            //配置連接信息
            String connstr = "server=localhost;port=3306;user=root;password=123456;database=ztree";
            MySqlConnection mySqlConnection = new MySqlConnection(connstr);
            //打開連接
            mySqlConnection.Open();
            //sql語句
            string sql = "select * from city";
            MySqlCommand mySqlCommand = new MySqlCommand(sql,mySqlConnection);
            //執行sql語句
            MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
            while(mySqlDataReader.Read()) {
                if(mySqlDataReader.HasRows) {
                    Console.WriteLine("id:{0};name:{1};pid:{2}",mySqlDataReader.GetString(0),mySqlDataReader.GetString(1),mySqlDataReader.GetString(2));
                }
            }
            mySqlConnection.Close();
        }
    

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ArrayList集合是C#中的一個非泛型的集合類,是弱數據類型的集合類,可以使用ArrayList集合變數來存儲集合元素信息,任何數據類型的變數都可加入到同一個ArrayList集合中,在ArrayList集合中,如果需要移除指定索引位置的元素,可以使用ArrayList集合的RemoveAt方法 ...
  • List集合類和ArrayList集合類都是C#語言中用於存儲集合數據的集合類,兩者都可靈活的插入、刪除以及訪問元素等等。但List集合和ArrayList集合的差別還是挺大的,首先List集合類是泛型集合,List集合中存儲的數據的類型都是確定的。ArrayList集合類為非泛型類集合,集合中存儲 ...
  • 在C#的集合操作過程中,我們一般常用的集合類為List集合,List集合是一種強類型的泛型集合,其實還有一個ArrayList集合類,ArrayList集合類則非泛型類的集合,並且ArrayList集合類不是強類型,任何類型的數據往ArrayList集合中新增都可以,所以在進行集合內部元素轉換操作的 ...
  • 在C#中的Datatable類中,Clone方法和Copy方法都可以用來複制當前的DataTable對象,但DataTable類中的Clone方法和Copy方法還是有區別的,Clone方法只複製結構信息,包括所有 DataTable 架構和約束,但Copy方法除了複製結構信息之外,還複製DataTa ...
  • 在C#中的Datatable類中,可以使用DataTable類的Merge方法對兩個相同結構的DataTable對象進行求並集運算,將兩個DataTable對象的數據行合併到其中一個DataTable變數中,或者說往其中一個DataTable對象中寫入另一個DataTable對象的所有數據行。下列例 ...
  • 在C#中的Datatable數據變數的操作過程中,有時候需要知道某一個列名在DataTable中的索引位置信息,此時可以通過DataTable變數的Columns屬性來獲取到所有的列信息,然後通過Columns屬性中的IndexOf方法來獲取指定列名的索引位置,IndexOf方法的參數為列名。即通過 ...
  • C#中的Datatable數據變數的操作過程中,可以通過DataTable的Copy方法快速複製當前的DataTable變數到新對象中,複製數據包含當前DataTable的結構信息如列名,同時也包含當前表格中的所有數據信息,通過Copy方法複製DataTable對象方便快捷,無需迴圈遍歷原有的Dat ...
  • 在C#中的Datatable數據變數的操作過程中,有時候需要判斷DataTable中是否存在某個列名,此時可以通過DataTable對象的Columns列對象集合屬性下的Contains方法來進行判斷,方便快捷,只需要傳入需要匹配的列的名稱,即可返回DataTable變數中是否存在該列名。 首先給出 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...