0. 前言
每篇一個前言,介紹一下這一篇的內容。之前的內容都是針對某些知識點進行的介紹,這篇內容介紹一下實際開發中常用的一些類和命名空間。這一篇是個連續劇,大概有個三四集。嗯,就是這樣。
1. System 命名空間
System空間,是C#的基礎命名空間,裡面定義了常用值和數據類型以及各種類型的基類,當然也包括了很多C#程序運行中用到類,具體可以訪問微軟的官方API說明。這裡簡單介紹一下 我們在開發中最常用到的幾個類。
1.1 Console
Console 控制檯類,表示一個控制檯應用程序的標準輸入流、輸出流和錯誤流。這是微軟官方文檔給的內容。實際上,Console類在一些其他類型的項目中也可以使用。因為Console類是程序與終端的交互,所以當程序持有一個終端的時候,該類就可以正確輸出內容。
照例,我們先看一下它的聲明:public static class Console 。可知這是一個靜態類,需要明確一個概念:
- 在C#甚至大多數編程語言(支持靜態類)中,靜態類不可被繼承,而且靜態類的方法都是工具方法;
- 靜態類沒有構造方法,也不能構造對象;
- 靜態類裡的方法都是靜態方法
- 訪問一個類的靜態方法需要通過類名.方法名來訪問
那麼我們可以使用:Console.方法名來調用Console的方法。
我們來看看Console在開發中常用的方法有哪些:
- 輸出: public static void Write ( 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只會在上一次輸出的結尾繼續輸出。
示例:
<code>class
Program
{static
void
Main
(
string
[] args) { Console.Write("打印測試..."
); Console.Write("Write輸出測試"
); Console.WriteLine(); Console.WriteLine("這行是調用WriteLine"
); Console.WriteLine("這行也是調用WriteLine輸出的"
); } }/<code>
運行結果:
與Write不同的地方是,WriteLine允許無參調用,表示輸出一個空行。
- 獲取用戶輸入: 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#中的數學工具類,為三角函數、對數函數和其他通用數學函數提供常數和靜態方法。這個類也是一個靜態類,當然這不會影響我們對它的好奇。
來,讓我們一起看看裡面有些什麼方法吧。
<code>public
static
TAbs
(
value
);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);public
static
double
BitDecrement
(double
x);public
static
double
BitIncrement
(double
x);public
static
double
Cbrt
(double
d);public
static
TCeiling
(d
);public
static
double
Cos
(double
d);public
static
int
DivRem
(int
a,int
b,out
int
result);public
static
double
Exp
(double
d);public
static
TFloor
(d
);public
static
int
ILogB
(
double
x);public
static
double
Log
(double
d);public
static
double
Log
(double
a,double
newBase);public
static
double
Log10
(double
d);public
static
double
Log2
(double
x);public
static
TMax
(t1, t2
);public
static
TMin
(t1, t2
);public
static
double
Pow
(double
x,double
y);public
static
double
Round
(double
a);public
static
double
ScaleB
(double
x,int
n);public
static
int
Sign
(
value
);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
TTruncate
(d
);/<code>
嗯,密密麻麻的一大堆,方法雖多,但值得注意的方法只有以下幾個:
<code>public
static
TCeiling
( d)
;public
static
TFloor
( d)
;public
static
TTruncate
( d)
;/<code>
雖然這三個方法計算的結果都是整數,但返回類型並不是整數,所以在使用的時候需要我們進行一次類型轉換。Math類還有兩個值得注意的字段:
<code>public
const
double
E =2.7182818284590451
;public
const
double
PI =3.1415926535897931
;/<code>
這兩個也是Math裡唯一的兩個字段,這是數學中著名的兩個無理數,這裡只截取了一部分有效值。
1.3 Random
C# 中Random表示偽隨機數生成器,這是一種能夠產生滿足某些隨機性統計要求的數字序列的算法。這裡大概講解一下Random的使用,具體的原理等我研究一下哈。
Random是一個類,所以與之前的兩個類不同地方就是使用Random生成隨機數需要事先構造一個Random對象。Random常用的方法有以下幾組:
<code>public
virtual
int
Next
()
;public
virtual
int
Next
(
int
maxValue);public
virtual
int
Next
(
int
minValue,int
maxValue);public
virtual
double
NextDouble
()
;/<code>
我們先演示一下Random的基本應用:
<code>class
Program
{static
void
Main
(string
[] args) { Random rand =new
Random();for
(int
i =0
;i10
; i++) { Console.WriteLine($"第
{i +
1
}次生成:{rand.Next()}
" ); } Console.ReadLine(); } }/<code>
打印結果:
可以看出直接Next返回的結果數字都比較大,所以在使用的時候,一般會使用Next (int minValue, int maxValue) 限定返回值。
回到開頭,Random是一個類,每次初始化的時候系統會自動計算一個種子給它,如果快速重複構建Random對象,可能會生成一個重複序列,即每次調用的結果一致。(當然,官方說可以,實際我在net core 3.1的環境裡沒測出來)
<code>class
Program
{static
void
Main
(string
[] args) {for
(int
i =0
;i5
; i++) { Random rand =new
Random();for
(int
j =0
; j10
; j++) { Console.WriteLine($"第
{i}
個Random 第{j}
次生成:{rand.Next()}
"); } } Console.ReadLine(); } }/<code>
這是測試代碼,有興趣的小夥伴可以自己試試。
更多內容煩請關注我的博客