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>
这是测试代码,有兴趣的小伙伴可以自己试试。
更多内容烦请关注我的博客