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

相关文章
相关标签/搜索