C# 基礎知識系列- 13 常見類庫介紹(一)

来源:https://www.cnblogs.com/c7jie/archive/2020/04/25/12771247.html
-Advertisement-
Play Games

0. 前言 每篇一個前言,介紹一下這一篇的內容。之前的內容都是針對某些知識點進行的介紹,這篇內容介紹一下實際開發中常用的一些類和命名空間。這一篇是個連續劇,大概有個三四集。嗯,就是這樣。 1. System 命名空間 System空間,是C 的基礎命名空間,裡面定義了常用值和數據類型以及各種類型的基 ...


0. 前言

每篇一個前言,介紹一下這一篇的內容。之前的內容都是針對某些知識點進行的介紹,這篇內容介紹一下實際開發中常用的一些類和命名空間。這一篇是個連續劇,大概有個三四集。嗯,就是這樣。

1. System 命名空間

System空間,是C#的基礎命名空間,裡面定義了常用值和數據類型以及各種類型的基類,當然也包括了很多C#程式運行中用到類,具體可以訪問微軟的官方API說明。這裡簡單介紹一下 我們在開發中最常用到的幾個類。

1.1 Console

Console 控制台類,表示一個控制台應用程式的標準輸入流、輸出流和錯誤流。這是微軟官方文檔給的內容。實際上,Console類在一些其他類型的項目中也可以使用。因為Console類是程式與終端的交互,所以當程式持有一個終端的時候,該類就可以正確輸出內容。

照例,我們先看一下它的聲明:public static class Console 。可知這是一個靜態類,需要明確一個概念:

  • 在C#甚至大多數編程語言(支持靜態類)中,靜態類不可被繼承,而且靜態類的方法都是工具方法;
  • 靜態類沒有構造方法,也不能構造對象;
  • 靜態類里的方法都是靜態方法
  • 訪問一個類的靜態方法需要通過類名.方法名來訪問

那麼我們可以使用:Console.方法名來調用Console的方法。

我們來看看Console在開發中常用的方法有哪些:

  1. 輸出:

    public static void Write (<T> value); //T 表示類型
    public static void Write (string format, params object[] arg);
    

    Write方法一共有17個重載版本,其中有常用的有以上兩鐘(不是兩個版本)。其中第一中寫法,T 代表C#的基礎數據類型中的10種,再加一個Object。

    作用是將參數轉成字元串列印到控制臺中,所以效果與先將對象轉成字元串然後再列印一樣,所以第二種調用方式參數類型與 String.Format是一致的。

    示例代碼:

    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("列印測試...");
        }
    }
    

    效果如下:

    image-20200424164707972

    如上圖所示,會出現一個黑色背景的圖框,然後顯示列印的內容。

    C# 關於控制台的輸出還有一個方法:WriteLine,從名字來看是寫一行的意思,實際表現也是如此,該方法每次輸出都會產生新的一行內容,而Write只會在上一次輸出的結尾繼續輸出。

    示例:

    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("列印測試...");
            Console.Write("Write輸出測試");
            Console.WriteLine();
            Console.WriteLine("這行是調用WriteLine");
            Console.WriteLine("這行也是調用WriteLine輸出的");
        }
    }
    

    運行結果:

    image-20200424165458931

    Write不同的地方是,WriteLine允許無參調用,表示輸出一個空行。

  2. 獲取用戶輸入:

    public static int Read ();
    public static string ReadLine ();
    

    Console在讀這方面就沒有寫那麼花里胡哨了,只有兩個是我們常用的讀。第一個是,從輸入流中讀取一個字元,如果沒有輸入則返回-1;第二個是讀取輸入的一行字元。

    關於輸入流以及流沒有內容時返回-1這個問題就不在這裡做介紹了。有追更的小伙伴可以等待《IO篇》的更新。

    第二個,就很有意思了,獲取輸入的一行內容,而不是一個字元,也就是說當用戶決定這行內容輸入完成點擊換行後程式就能讀取到輸入的結果。

    來,看一下示例:

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Read 測試");
            Console.WriteLine("請輸入一個任意內容並按回車:");
            var key = Console.Read();
            Console.WriteLine($"輸入的是:{key}");
            Console.WriteLine();
            Console.ReadLine();
            key = Console.Read();
            Console.WriteLine($"輸入的是:{key}");
            Console.ReadLine();
            Console.WriteLine("ReadLine 測試");
            Console.WriteLine("請輸入任意內容,並換行:");
            var line = Console.ReadLine();
            Console.WriteLine($"輸入的是:{line}");
            Console.WriteLine("示例結束");
    
        }
    }
    

    結果如下:

    image-20200424210005278

    示例中,我在每次調用Read前,都調用了一個ReadLine,這是因為在控制臺中一次輸入字元,然後按下回車並換行,這是有兩個輸入,所以在第二次Read時會將上次未讀取的繼續讀取出來,所以我利用ReadLine的特性將未讀取的內容一次性讀取出來,保證下次調用都必須從控制台讀取用戶輸入。

當然,Console類並不是只有這些內容,只是這些是我們最常接觸的方法。

1.2 Math

C#中的數學工具類,為三角函數、對數函數和其他通用數學函數提供常數和靜態方法。這個類也是一個靜態類,當然這不會影響我們對它的好奇。

來,讓我們一起看看裡面有些什麼方法吧。

public static T Abs (<T> value);//T 代表 decimal, int,double,flout,long,sbyte,short,返回絕對值
public static double Acos (double d);//返回餘弦值為指定數字的角度。
public static double Acosh (double d);//返回雙曲餘弦值為指定數字的角度。
public static double Asin (double d);// 返回正弦值為指定數字的角度。
public static double Asinh (double d);// 返回雙曲正弦值為指定數字的角度。
public static double Atan (double d);// 返回正切值為指定數字的角度。
public static double Atan2 (double y, double x);// 返回正切值為兩個指定數字的商的角度。
public static long BigMul (int a, int b);// 生成兩個 32 位數字的完整乘積。
public static double BitDecrement (double x);// 返回小於 x 的下一個最小值。
public static double BitIncrement (double x);// 返回大於 x 的下一個最大值。
public static double Cbrt (double d);// 返回指定數字的立方根。
public static T Ceiling (<T> d); //T 代表 decimal、double,返回大於或等於指定數字的最小整數值。
public static double Cos (double d);// 返回指定角度的餘弦值。
public static int DivRem (int a, int b, out int result);// 計算兩個數字的商,併在輸出參數中返回餘數。result為餘數
public static double Exp (double d);//返回 e 的指定次冪,e 指自然對數的底
public static T Floor (<T> d); //T 代表 decimal、double,返回小於或等於指定雙精度浮點數的最大整數值。
public static int ILogB (double x);// 返回指定數字以 2 為底的整數對數。
public static double Log (double d);//返回指定數字的自然對數(底為 e)。
public static double Log (double a, double newBase);// 返回指定數字在使用指定底時的對數。newBase為底
public static double Log10 (double d);//返回指定數字以 10 為底的對數
public static double Log2 (double x);//返回指定數字以 2 為底的對數。
public static T Max(<T> t1,<T> t2);// T 代表 decimal, int,double,flout,long,sbyte,short,返回兩者中較大的那個
public static T Min(<T> t1,<T> t2);// T 代表 decimal, int,double,flout,long,sbyte,short,返回兩者中較小的那個
public static double Pow (double x, double y);// 返回指定數字的指定次冪。
public static double Round (double a);// 將雙精度浮點值舍入到最接近的整數值,並將中點值舍入到最接近的偶數。
public static double ScaleB (double x, int n);//返回有效計算的 x * 2^n。
public static int Sign (<T> value); // T 代表 decimal,double,flout,int,long,sbyte,short,返回指示數字元號的整數。
public static double Sin (double a);// 返回指定角度的正弦值。
public static double Sinh (double value);//返回指定角度的雙曲正弦值。
public static double Sqrt (double d);//返回指定數字的平方根。
public static double Tan (double a);//返回指定角度的正切值。
public static double Tanh (double value);//返回指定角度的雙曲正切值。
public static T Truncate (<T> d);//T 代表 decimal、double,計算一個數字的整數部分。

嗯,密密麻麻的一大堆,方法雖多,但值得註意的方法只有以下幾個:

public static T Ceiling (<T> d); //T 代表 decimal、double,返回大於或等於指定數字的最小整數值。
public static T Floor (<T> d); //T 代表 decimal、double,返回小於或等於指定雙精度浮點數的最大整數值。
public static T Truncate (<T> d);//T 代表 decimal、double,計算一個數字的整數部分。

雖然這三個方法計算的結果都是整數,但返回類型並不是整數,所以在使用的時候需要我們進行一次類型轉換。Math類還有兩個值得註意的欄位:

public const double E = 2.7182818284590451;// 表示自然對數的底,它由常數 e 指定。
public const double PI = 3.1415926535897931;// 表示圓的周長與其直徑的比值,由常數 π 指定。

這兩個也是Math里唯一的兩個欄位,這是數學中著名的兩個無理數,這裡只截取了一部分有效值。

1.3 Random

C# 中Random表示偽隨機數生成器,這是一種能夠產生滿足某些隨機性統計要求的數字序列的演算法。這裡大概講解一下Random的使用,具體的原理等我研究一下哈。

Random是一個類,所以與之前的兩個類不同地方就是使用Random生成隨機數需要事先構造一個Random對象。Random常用的方法有以下幾組:

public virtual int Next ();// 返回一個整型的隨機數
public virtual int Next (int maxValue);//返回一個小於所指定最大值的非負隨機整數
public virtual int Next (int minValue, int maxValue);//返回在指定範圍內的任意整數。
public virtual double NextDouble ();//返回一個大於或等於 0.0 且小於 1.0 的隨機浮點數。

我們先演示一下Random的基本應用:

class Program
{
    static void Main(string[] args)
    {
        Random rand = new Random();
        for(int i = 0;i< 10; i++)
        {
            Console.WriteLine($"第{i + 1}次生成:{rand.Next()}");
        }
        Console.ReadLine();
    }
}

列印結果:

image-20200424225811906

可以看出直接Next返回的結果數字都比較大,所以在使用的時候,一般會使用Next (int minValue, int maxValue) 限定返回值。

回到開頭,Random是一個類,每次初始化的時候系統會自動計算一個種子給它,如果快速重覆構建Random對象,可能會生成一個重覆序列,即每次調用的結果一致。(當然,官方說可以,實際我在net core 3.1的環境里沒測出來)

class Program
{
    static void Main(string[] args)
    {
        for(int i = 0;i< 5; i++)
        {
            Random rand = new Random();
            for(int j = 0; j < 10; j++)
            {
                Console.WriteLine($"第{i}個Random 第{j}次生成:{rand.Next()}");
            }
        }
        Console.ReadLine();
    }
}

這是測試代碼,有興趣的小伙伴可以自己試試。

更多內容煩請關註我的博客

file


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

-Advertisement-
Play Games
更多相關文章
  • 案例故事: Android車載測試過程中,客戶反饋低概率偶現高德地圖App啟動過程中, 出現了報錯:“高德地圖無法繼續運行”,客戶說只碰到過一次,後續再沒復現過, 測試經理安排我們負責壓測,反覆進行高德地圖打開關閉, 併在打開過程中,截一張圖,打開載入完畢後再截取一張圖, 測試經理希望自動化實現截取 ...
  • 基本if選擇結構 語法: if(條件){ ​ //條件為真執行 }條件為假執行大括弧外 案列: 1 if(javaScore>98){ 2 System.out.println("獎勵硬碟"); 3 } if-else選擇結構 語法: if(條件){ ​ //代碼塊1 }else{ ​ //代碼塊2 ...
  • 【準備環境】 python pycharm mysql 參考 https://www.cnblogs.com/xinhua19/p/12750611.html redis 參考https://www.cnblogs.com/xinhua19/p/12750659.html 【步驟】 1.打開pych ...
  • Python 代碼編輯器怎麼選?PyCharm、VS Code、Jupyter Notebook 都各有特色,Jupyter 適合做數據分析這些需要可視化的操作,PyCharm 更適合做完整的 Python 項目。然而,因為互動式操作,很少會有開發者想到用 Jupyter 做 Debug。 儘管很多 ...
  • 大家好,我是位元組跳動的一名研發麵試官。 2020春招過了,面試也進行了很多場,在整個面試過程中,我不斷被同學問到各式花樣問題: “什麼才是研發麵試考察的核心?” “考前究竟要不要刷題?” “如果跨專業面試要怎麼辦?” “如何更好地描述項目經歷?” “面試中有哪些面試雷區?” ...... 眼看新的一 ...
  • 項目簡介 項目來源於: "https://gitee.com/wu_yun_long/student_management_system" 本系統是基於 Maven+JSP+SSM+Mysql+C3P0 實現的學生管理系統。功能簡單,對業務方面要求低,可以作為學習SSM的入門項目。 難度等級:中等 ...
  • 前言 文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 這篇文章中向大家介紹了Python繪製詞雲的方法,不難看出繪製詞雲可以說是一個“吃瓜神器”,它可以讓我們直觀的看到新聞的核心內容。那麼對於今天的大新聞,我們就繼續用Python ...
  • 第三方存儲媒介 前面我們介紹了基於 Swoole 的 Process 及 Process\Pool 模塊在 PHP 中實現多進程管理,但是多進程模式下進程間是相互隔離的,無法共用數據和變數,即便是通過 global 定義的全局或超全局變數,也只是在所屬進程中有效,如果要在 Swoole 實現的多進程 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...