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

0. 前言

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

1. System 命名空間

System空間,是C#的基礎命名空間,裏面定義了經常使用值和數據類型以及各類類型的基類,固然也包括了不少C#程序運行中用到類,具體能夠訪問微軟的官方API說明。這裏簡單介紹一下 咱們在開發中最經常使用到的幾個類。編程

1.1 Console

Console 控制檯類,表示一個控制檯應用程序的標準輸入流、輸出流和錯誤流。這是微軟官方文檔給的內容。實際上,Console類在一些其餘類型的項目中也可使用。由於Console類是程序與終端的交互,因此當程序持有一個終端的時候,該類就能夠正確輸出內容。c#

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

  • 在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是一致的。code

    示例代碼:orm

    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

相關文章
相關標籤/搜索