了解过往

本节介绍C#一些基础知识,当然了,本人常用Framework 4.5的一些知识,我掌握的的只提不写。

大致C#,重点东西

 2002年 1.0 面向对象,静态类型

 2005 2.0 泛型 强类型 可空值类型 性能↑ 

 2007 3.0 Linq,lambda,声明式编程,隐式类型

 2010 4.0 F#和python等动态语言改进互操作性,dynamic,可选参数和命名参数

 2012 5.0 简化异步操作 async,await

 2015 6.0 静态导入,内插字符串,定义只读属性

 2017/3 7.0 二进制字面量和数字分隔符,模式匹配 out变量 元组 局部函数

 2017/8 7.1 默认字面量设置字段,推断元组名称 async Main

 2017/11 7.2 数字字面量中前导下划线,非追踪命名参数,私有保护访问修饰符 ,元组类型测试

 2018/5 7.3 性能导向型安全代码,改进ref变量,指针和stackalloc,这些高级功能

 https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-7-3

 学习C#最好的就是对着微软的msdn文档,自己学习

 2019/9 8.0 主要关注空处理,可空引用类型,switch简化,默认的接口方法

 https://github.com/dotnet/roslyn

 当然C#9.0也出来了,本书没有讲,就不写了

https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-9

Roylsn是.NET语言编译器

.NET Core SDK对应 Roslyn3~3.4版本

https://github.com/dotnet/roslyn/blob/main/docs/wiki/NuGet-packages.md

3.8对应了 9.0的版本

打开vscode,打开终端

输入

dotnet --version

csc -langversion:?

配置环境变量,找到桌面上的“计算机”图标,右键单击,并在弹出的菜单中点击 “属性” --"高级系统设置"--"环境变量"--"系统变量",找到变量 Path, 添加一个路径 C:\Windows\Microsoft.NET\Framework\v2.0.50727\注意,多个路径使用分号(;)隔开,Windows其他版本追加在后面即可,如果版本不同弹出窗口,点击新建填写路径)。

C:\Windows\Microsoft.NET\Framework\v2.0.50727\

重启vscode

C:\Windows\Microsoft.NET\Framework\v4.0.30319

如果需要指定C#版本,单击csproj文件,修改framework

比如修改到netcore3.0的预览版,修改如下

然我电脑没有安装3.0,所以运行项目会报错

3.1是可以的

项目必须以core3.0或者netstandard2.1为目标C#8.0才能使用

AY下面的博客尝试用 NET5为目标写,C#9.0应该包含了8.0的特性。

基础语法用控制台学习

新建目录:

D:\aycore\Code\Chapter02\Basics

建立控制台

体验下vscode的报错

调整代码如下,可以单击问题标签,查看错误建议

大小写

查看当前引用的程序集的信息

效果:

代码中 继续添加代码

效果

所以啊,添加了不用的代码,会导致程序引用了很多类型

定义个变量,首先考虑占用内存,其次考虑处理速度。比如在64位系统,16位数字的速度,可能不如添加64位的数字的速度快。

nameof 和 $直接使用变量

字符串前面加上@符号,禁止转义字符,反斜杠就是反斜杠

数字

十进制数字10存储在二进制表示为 00001010

C#7.0+版本中

 使用_下划线可以分割数字,提高可读性

例如 1000000可以表示如下

sizeof(类型),比如下面

sizeof(int) 可以返回int类型的长度

浮点数记数字12.75

128 64 32 16 8 4 2 1 . 1/2 1/4 1/8 1/16

 0    0    0   0  1 1 0 0 . 1     1     0    0

所以12.75的二进制就是 1100.1100

注意 

两个double相加 不等于 我们算的数字

比如 在计算机中 0.1+0.2 是不等于 0.3

原因是, 计算机中无法表示0.1和0.2

计算机中有 0.5 0.25 0.125等

永远不要使用 ==比较两个double值,海湾战争,美国爱国者导弹用了double,不精确性导致导弹无法跟踪和拦截来袭的伊拉克飞毛腿导弹

修改成decimal,比如做收银软件,货币,CAD绘图,一般工程学,就decimal了

double的特殊值

接下来讲下 vscode中的工作区,

打开文件夹,只能打开一个项目

打开工作区,可以多个项目,此时打开终端时候,要注意当前的 路径

首先保存当前项目到工作区

添加Chapter01到工作区

也就是说,可以添加多个文件夹过来,比如

dynamic和var类型跳过不讲

default()

除了string,大多数基本类型都有默认值,以为必须有值

可以使用default()

null值获取

C#8.0 引入了可空引用类型和 不可空引用类型

可以通过设置 文件级或者项目级 选项来启用 这个特性,从而将引用类型配置为不再允许为空。

opt-in project,opt-out files 项目级别启用

Opt-in files 仅为单个文件启用这个特性

项目级启用

 <Nullable>enable</Nullable>

启用后,文件级别禁用,在代码文件顶部添加以下内容

启用可空类型 # nullable enable

比如现在该文件,顶部禁用了

我们如何使用string?类型

比如整个项目都是禁用的,

但是在某个文件是支持的,我们先在那个文件上

# nullable enable

发现Name会报波浪线,因为需要设置string?

没关系,设置个默认值就行了

这样子,我们就知道了

学生姓名必填的,爸爸名字可以为null,母亲也是可以为null

现在我们使用这个类,此时就会报错,因为Name字段不能为空

检查null

 string? daaa=null;
            int x=daaa.Length;
            int? y=daaa?.Length;

运行时候x会报一场,但是y不会报异常

双问号用法

string? daaa=null;
            // int x=daaa.Length;
            int? y=daaa?.Length??10;
            System.Console.WriteLine(y); //返回10,因为 daaa是null,如果是null,返回??右侧的值

创建F# 控制台

创建目录并打开 D:\aycore\Code\Chapter02\FSharpDemo

dotnet new console -lang "F#" -name "ayfsharp"

C# 内插字符串格式化

    decimal b=0.22M;
            System.Console.WriteLine($"{a} -- {a*b:C}");

语法

{index [,alignment] [: formatString]}

比如输出 对齐, 逗号右侧的数字,正数就是右对齐,负数是左对齐,然后 绝对值后的数字,就是对其的字符长度

{0,-8}  这个意思是,第一个参数的值,左对齐,8个字符的长度,特别做表格对齐的时候有用

输出效果如下:

导入命名空间的简化

前面这些代码 冗长,顶部引入,引入如果太多了,自己Ctrl+H 替换全部就行了

ReadKey 

运行后,按键盘,可以列出当前按的键的信息

ConsoleKeyInfo keyInfo=System.Console.ReadKey();
            System.Console.WriteLine();
            System.Console.WriteLine("Key:{0},Char:{1},Modifiers:{2}",keyInfo.Key,keyInfo.KeyChar,keyInfo.Modifiers);

Main函数的参数

那么运行这个控制台,传递参数

dotnet run p1 p2 p3

会输出3个参数,参数中间用空格隔开

Main函数会根据 空格号 分割,然后你拿值处理。

控制台颜色和背景色,宽高,已经变黄咯

宽高设置,在macOS没效果

如果报错,可以使用try  catch

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐