ay的C#8.0和net5高级编程笔记2-C#编程基础
本节介绍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 简化异步操作 asy
了解过往
本节介绍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
更多推荐



所有评论(0)