1. 程式人生 > >C# 基礎知識系列- 13 常見類庫介紹(一)

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

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("列印測試...");
        }
    }
    

    效果如下:

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

    C# 關於控制檯的輸出還有一個方法:WriteLine

    ,從名字來看是寫一行的意思,實際表現也是如此,該方法每次輸出都會產生新的一行內容,而Write只會在上一次輸出的結尾繼續輸出。

    示例:

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

    執行結果:

    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("示例結束");
    
        }
    }
    

    結果如下:

    示例中,我在每次呼叫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();
    }
}

列印結果:

可以看出直接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();
    }
}

這是測試程式碼,有興趣的小夥伴可以自己試試。

更多內容煩請關注我的部落格

相關推薦

C# 基礎知識系列- 13 常見介紹

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

C# 基礎知識系列- 13 常見介紹日期時間

# 0. 前言 上一篇內容介紹了Console類和Math類,這篇內容著重介紹一下C#中時間日期的處理方式。 > 上一篇勘誤: 上一篇中關於靜態類沒有建構函式,這一表述有誤。正確的說法是C#中靜態類不包含常規建構函式,但可以新增一個靜態建構函式。 > 靜態建構函式與普通普通建構函式的區別是,靜態

C# 基礎知識系列- 10 反射和泛型

0. 前言 這篇文章延續《C# 基礎知識系列- 5 反射和泛型》,繼續介紹C#在反射所開發的功能和做的努力。上一篇文章大概介紹了一下泛型和反射的一些基本內容,主要是通過獲取物件的型別,然後通過這個型別物件操作物件。這一篇介紹一個在反射中很重要的內容:特性,以及上一篇未完成的內容——泛型在反射中的引用。 1.

C#基礎知識-面向對象思想之繼承

添加 電視劇 一中 一段 public bsp 更多 cnblogs tin 上一篇的標題編程思想我覺得不是很符合主題,因為編程思想的範圍太大了,不僅僅是封裝 繼承 多態,所以比較符合主題的應該是面向對象思想。這一篇中將繼續敘述面向對象思想中的繼承。 從字面來看繼承表達的意

MongoDB基礎教程系列--第二篇 MongoDB基本操作

1、安裝環境 在官網上下載MongoDB的最新版本,根據自身Windows版本下載正確的MongoDB版本。下載後,雙擊32位或者64位.msi檔案,按操作提示安裝就可以了。 說明: 32 位版本的 MongoDB 只支援 2G 以下的資料庫,只適用於測試及評估。 在

C#進階系列——DDD領域驅動設計初探:聚合

前言:又有差不多半個月沒寫點什麼了,感覺這樣很對不起自己似的。今天看到一篇博文裡面寫道:越是忙人越有時間寫部落格。呵呵,似乎有點道理,博主為了證明自己也是忙人,這不就來學習下DDD這麼一個聽上去高大上的東西。前面介紹了下MEF和AOP的相關知識,後面打算分享Automapper、倉儲模式、WCF等東西的,可是

android application簡單介紹

cati theme text color raw sdn water bsp public 每次應用程序執行時。應用程序的application類保持實例化的狀態。通過擴展applicaiton類,能夠完畢下面3項工作: 1.對android執行時廣播的應用程序

硬件系列之超聲波模塊介紹

返回 精度 就是 包括 發送 平時 自動 距離 c-s HC-SR04模塊可提供2cm-40cm的非接觸式距離感測功能,測距精度可達3mm: 模塊包括超聲波發生器,接收器與控制器,檢測角度30度。 控制方式: 采用IO口TRIG觸發測距,給最少10us的高電平信號 模塊自動

Android AdapterView及子介紹

AdapterView是一組重要的元件,AdapterView本身是一個抽象基類,它派生的子類在用法上十分相似,只是顯示介面有一定的區別,因此把它們歸為一類,針對它們的共性集中講解,並突出介紹它們的區別。 AdapterView具有如下特徵: (一)AdapterView繼

C# 基礎知識復習(六)---

etl 標識符 c# namespace 函數 屬性 註意 cif 聲明 C# 類(Class) 當你定義一個類時,你定義了一個數據類型的藍圖。這實際上並沒有定義任何的數據,但它定義了類的名稱意味著什麽,也就是說,類的對象由什麽組成及在這個對象上可執行什麽操作。對象是類的

[C# 基礎知識系列] 專題十五:全面解析擴充套件方法

引言:    C# 3中所有特性的提出都是更好地為Linq服務的, 充分理解這些基礎特性後。對於更深層次地去理解Linq的架構方面會更加簡單,從而就可以自己去實現一個簡單的ORM框架的,對於Linq的學習在下一個專題中將會簡單和大家介紹下,這個專題還是先來介紹服務於Li

[C#基礎知識系列]專題十:全面解析可空型別

引言:   C# 2.0 中還引入了可空型別,可空型別也是值型別,只是可空型別是包括null的值型別的,下面就介紹下C#2.0中對可空型別的支援具體有哪些內容(最近一直都在思考如何來分享這篇文章的,因為剛開始覺得可空型別使用過程中比較簡單,覺得沒有講的必要,但是考慮到這

[C#基礎知識系列]專題十二:迭代器

引言:    在C# 1.0中我們經常使用foreach來遍歷一個集合中的元素,然而一個型別要能夠使用foreach關鍵字來對其進行遍歷必須實現IEnumerable或IEnumerable<T>介面,(之所以來必須要實現IEnumerable這個介面,是因

C++基礎知識複習--結構體陣列作為函式引數

//結構體陣列,類陣列,普通陣列,作為函式引數 #include<iostream> #include<string> using namespace std; class C

C# 基礎知識系列- 3 集合陣列

簡單的介紹一下集合,通俗來講就是用來保管多個數據的方案。比如說我們是一個公司的倉庫管理,公司有一堆貨物需要管理,有同類的,有不同類的,總而言之就是很多、很亂。我們對照集合的概念對倉庫進行管理的話,那麼 陣列就是將一堆貨整整齊齊的碼在倉庫的某個地方,普通列表也是如此;Set就是在倉庫裡有這麼一個貨架,每種貨品

C# 基礎知識系列- 4 面向物件

# 面向物件 面向物件是一個抽象的概念,其本質就是對事物以抽象的方式建立對應的模型。 簡單來講,比如我有一隻鋼筆,那麼我就可以通過分析,可以得到 這隻鋼筆的材第是塑料,品牌是個雜牌 ,裡面裝的墨是黑色的,可以用。這時候就能建立一個鋼筆的模型,它在這裡應該有這些屬性: ![file](https://img

C# 基礎知識系列- 9 字串的更多用法

0. 前言 上一篇文章介紹了字串自身的一些方法,就是物件方法。在字串體系中,還有一些是string類提供的靜態方法。這兩部分構成了字串體系,當然還有一些三方庫為字串提供了擴充套件方法。 這裡簡單的介紹一下string類的靜態方法。 1. 玩轉建立字串 1.1 Create一個字串 通過呼叫string.Cre

C# 基礎知識系列- 12 任務和多執行緒

0. 前言 照例一份前言,在介紹任務和多執行緒之前,先介紹一下非同步和同步的概念。我們之間介紹的知識點都是在同步執行,所謂的同步就是一行程式碼一行程式碼的執行,就像是我們日常乘坐地鐵通過安檢通道一樣,想象我們每個人都是一行程式碼,我們依次通過安檢儀器的時候就是同步。 那麼,什麼是非同步呢?有一個時間利用率的故

C# 基礎知識系列- 14 IO篇 檔案的操作

> 本篇繼續前兩篇內容,跟大家介紹一下Path類以及FileSystemInfo這個類的主要方法和屬性。 > > 上文提到,在《C# 基礎知識系列-IO篇》之檔案相關的內容完結之後,會帶領大家開發一個小工具-快速檢索檔案所在目錄。 ## 1.3. Path Path的中文名稱有路徑的

C# 基礎知識系列- 14 IO篇 流的使用

# 0. 前言 繼續之前的C# IO流,在前幾篇小短片中我們大概看了下C# 的基礎IO也對檔案、目錄和路徑的操作有了一定的瞭解。這一篇開始,給大家演示一下流的各種操作。以檔案流為例,一起來看看如何操作吧。 > 注:之前更新了一篇《Spring Cloud 實戰日記》,這是一個新的系列,有興趣的小夥伴