C# 基础知识系列- 13 常见类库介绍(一)
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 (<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
允许无参调用,表示输出一个空行。获取用户输入:
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 常见类库介绍(一)的更多相关文章
- C# 基础知识系列- 13 常见类库介绍(二)日期时间类
0. 前言 上一篇内容介绍了Console类和Math类,这篇内容着重介绍一下C#中时间日期的处理方式. 上一篇勘误: 上一篇中关于静态类没有构造函数,这一表述有误.正确的说法是C#中静态类不包含常规 ...
- C# 基础知识系列-13 常见类库(三)
0. 前言 在<C# 基础知识系列- 13 常见类库(二)>中,我们介绍了一下DateTime和TimeSpan这两个结构体的内容,也就是C#中日期时间的简单操作.本篇将介绍Guid和Nu ...
- C# 基础知识系列- 3 集合数组
简单的介绍一下集合,通俗来讲就是用来保管多个数据的方案.比如说我们是一个公司的仓库管理,公司有一堆货物需要管理,有同类的,有不同类的,总而言之就是很多.很乱.我们对照集合的概念对仓库进行管理的话,那么 ...
- 学习javascript基础知识系列第二节 - this用法
通过一段代码学习javascript基础知识系列 第二节 - this用法 this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象.但是在javascr ...
- C# 基础知识系列- 9 字符串的更多用法(一)
0. 前言 在前面的文章里简单介绍了一下字符串的相关内容,并没有涉及到更多的相关内容,这一篇将尝试讲解一下在实际开发工作中会遇到的字符串的很多操作. 1. 创建一个字符串 这部分介绍一下如何创建一个字 ...
- C# 基础知识系列- 10 反射和泛型(二)
0. 前言 这篇文章延续<C# 基础知识系列- 5 反射和泛型>,继续介绍C#在反射所开发的功能和做的努力.上一篇文章大概介绍了一下泛型和反射的一些基本内容,主要是通过获取对象的类型,然后 ...
- C# 基础知识系列- 12 任务和多线程
0. 前言 照例一份前言,在介绍任务和多线程之前,先介绍一下异步和同步的概念.我们之间介绍的知识点都是在同步执行,所谓的同步就是一行代码一行代码的执行,就像是我们日常乘坐地铁通过安检通道一样,想象我们 ...
- C# 基础知识系列- 14 IO篇 文件的操作 (3)
本篇继续前两篇内容,跟大家介绍一下Path类以及FileSystemInfo这个类的主要方法和属性. 上文提到,在<C# 基础知识系列-IO篇>之文件相关的内容完结之后,会带领大家开发一个 ...
- C# 基础知识系列- 14 IO篇 流的使用
0. 前言 继续之前的C# IO流,在前几篇小短片中我们大概看了下C# 的基础IO也对文件.目录和路径的操作有了一定的了解.这一篇开始,给大家演示一下流的各种操作.以文件流为例,一起来看看如何操作吧. ...
随机推荐
- MATLAB中mean的用法
https://blog.csdn.net/wangyang20170901/article/details/78745587 MATLAB中mean的用法 转载仙女阳 最后发布于2017-12-07 ...
- 关于用命令行和idea对项目打jar包
前提说一下,我们一般是对编译后的项目进行打包,不然打包后还得自己去重新编译class文件. 假如这是你的一个项目目录: 我们要写一个简单的计算器工具类项目,然后对他进行打包, idea里面out文件夹 ...
- ClickHouse学习系列之一【安装说明】
背景 最近花了些时间看了下ClickHouse文档,发现它在OLAP方面表现很优异,而且相对也比较轻量和简单,所以准备入门了解下该数据库系统.按照习惯第一步先安装,本文对其用户权限管理方面进行梳理说明 ...
- 密钥对格式转换:JKS到PEM
此处脚本用途:Tomcat的JKS转换成Nginx的PEM格式. #!/bin/bash export JKS=$1 export PASS=$2 NAME=$(basename "$JKS ...
- Java构造器(构造方法/constructor)
我们先来看一下什么是构造器: 1.构造器也叫构造方法或构造函数,分为有参构造器和无参构造器: 2.构造器也是一种方法,只不过是一种特殊的方法,它会在对象创建的时候被调用: 3.构造器最大的作用就是在创 ...
- CSS基础总结 1
一.什么是 CSS? CSS 指层叠样式表 (Cascading Style Sheets),是一种用来表现 HTML 文档样式的语言,样式定义如何显示 HTML 元素,是能够真正做到网页表现与结构分 ...
- nginx代理图片访问
nginx代理图片访问 首先配置nginx的代理物理路径 我的是在E盘下面的image 1 #图片的代理 2 server { 3 listen 80; 4 #配置访问的域名 5 server_nam ...
- Unity 游戏框架搭建 2019 (二十一、二十二) 第三章简介&整理前的准备
整理前的准备 到目前为止,我们积攒了很多示例了,并且每个示例也都贯彻了最的约定和规则. 在上一篇的小结也说了一个比较新的东西:编程体验优化. 在之前我们还积攒了一个问题:代码重复问题. 我们可是忍住整 ...
- Java中的get()方法和set()方法
在Java中,为了数据的安全,换句话说就是为了隐藏你的代码的一些实现细节,我们会用private来修饰属性,使用private修饰的属性就不能被其他类直接访问了,想要访问就需要通过set.get方法: ...
- 关于git你日常工作中会用到的一些东西
前言 git是一个版本控制工具, 版本控制主要的好处有三点: 从当前版本回退到任意版本 查看历史版本 对比两个版本差异 git 相关术语 repository 仓库 branch 分支 summary ...