剪裁,选取了什么
向下不兼容
在需要 target 到不同平台时,优先保证对最新平台的支持 (因为最新平台上 才有那些 编程语言动态化 的性质,大大加强直觉。如果向下兼容,要放弃了 编程语言动态化 的性质 那么就不做向下兼容了。个人项目需要的是直觉和动力,商业化才需要考虑向下兼容)  https://www.cnblogs.com/jacobb/p/6819045.html 
最新技术和对最新平台的支持,兼容性极低 仅适配最新的平台 -- 至少适配了最新的平台,只要用户一旦升级到最新的平台,他们会发现 在最新平台 软件是可用的
剪裁,没有选取什么
(浏览器兼容性的术语) 平稳降级和渐进增强
用户爱不爱升级 不是我的事 不是我管的事 不是我需要考虑的事 不是我需要在乎的事 (你照顾用户 在乎太多 完成不了了,用户不会管你) https://blog.csdn.net/ssisse/article/details/52444036 
剪裁,没有选取什么
any dependency manager apart from .NET Core 3.1 dependency manager 
向下不兼容,就不用处理 `历史遗留问题` 引发的问题,比如 (既然 WPF 和 WinForm 只能在 Windows 运行,为什么要移植到 .NET Core https://www.zhihu.com/question/329045487 # 实际上 所谓的 WinForm 也不过是一个 package,既然 已经 各种 package 化了,那么 什么都有可能发生 ———— 最简单的办法 stick to dependency manager for .NET Core 3.1 就对了 )
剪裁,没有选取什么
非 .NET Core 3.1 dependency manager 治理下的 跨平台XAML框架 (比如 WPF https://www.zhihu.com/question/56305544 ) (.NET Core 3.1 dependency manager 治理下的 跨平台XAML框架,比如 Avalonia、Xamarin.Forms https://www.zhihu.com/question/329045487 )
剪裁,选取了什么
dependency manager for .NET Core 3.1 runtime
软件仓库:.NET Core 3.1 runtime 的软件仓库 
语法:最新的 SDK 所支持的写法 (类似 C11)
cmd:最新的 SDK 所支持的命令
包管理器:包的使用 packages 的使用,package 的载入
编辑器:支持多文件
包的探索:System.Drawing, System.
包的探索:App-Model API (package's API) 
默认配置 约定大于配置 (在 package 方面,应该是 开发者只需要关心 package 的名字和版本 用就完事了。runtime 不会轻易变的,py3.4 写的程序 也不会去用到 py2.7 的 pip2 软件仓库)
包的探索:
https://segmentfault.com/a/1190000022246536 # 所谓xx库 调库 调API 不过是完成事情的一种方式,自己写 or 调用别人写好的,没啥区别 (容器类 什么的,不也是别人写的一个 package 么 as 内置数据结构 标准库 https://dbader.org/blog/python-linked-list#As of Python 3.6 (CPython), doesn’t provide a dedicated linked list data type. There’s nothing like [Java’s `LinkedList`](https://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html) built into Python or into the Python standard library. )
包 用错了的后果 (用错了包包,达不到程序想要的效果了;用错了 程序无法启动了;用错了包包,O(1)的事情 变成 O(n) 了;用错了包包,变成 non-generic 了)
包的探索:
C# 对操作系统服务的内置接口,使其成为编写可移植的维护操作系统的管理工具和部件(有时也称shell工具)的理想工具 
包的探索:
完成计算机任务
包的探索:
就像用 ror 一样,ruby 不用学的,直接上

剪裁,没有选取什么
dependency manager for .NET Core 2.0 runtime
dependency manager for .NET Standard 2.0
历史遗留问题
老旧的 SDK 所支持的写法 (类似 C99)
从 C11 到 C99 的适配
处理如何让新版本写的 pacakge 能在老版本 runtime 里运行的问题 ( C11 的包 无法在 C99 跑,那么 想用它 怎么办?要么升级到 C11 ,要么 改掉一些运用了C11特性的函数 使之能在 C99 跑 https://segmentfault.com/a/1190000022254307 )
.NET Standard 作为一个标签
标准库的问题,标准库的概念 Go语言标准库 
BCL 和 FCL 的使用
实用工具 API 
.NET Standard class libraries 这一套从 .NET 技术宣传角度讲的 类库 https://docs.microsoft.com/en-us/dotnet/standard/class-libraries 
这一套从 .NET API 宣传角度讲的 类库 (实用工具 API、应用模型 API)
https://docs.microsoft.com/zh-cn/dotnet/standard/framework-libraries
package 的高级应用
https://docs.microsoft.com/zh-cn/dotnet/core/packages#packages

剪裁,没有选取什么
.NET 概述 (以 .NET 为描述中心的描述和 marketing, branding )
.NET 组件 体系结构组件 (Microsoft 积极开发和维护的主要 .NET 实现有 4 个:.NET Core、.NET Framework、Mono 和 UWP)
.NET 类库 
.NET 实用工具 
.NET 推荐的操作系统 (Windows Server) 
.NET Standard
.NET 目标框架 框架集 (没它也可以)
.NET 术语表
.NET 生态 (.NET 生态太乱,历史悠久) 

剪裁,选取了什么
不要被限制思维
思维不要被限制
不要被 branding 限制思维,`解决麻烦`是很重要的 提供答案 提供模板 
scripting csx 脚本语言解放思维
安装 .NET Core 3.1 LTS SDK and runtime 
(and dependency manager for .NET Core 3.1)

查看区
> dotnet --version
> dotnet --list-sdks
> dotnet --list-runtimes
/usr/local/share/dotnet (322MB)
~/.nuget/packages

(x) /Library/Frameworks/Mono.framework/Versions/Current

配置区
1
本机 macOS 10.13.6 High Sierra 
LTS .NET Core SDK:
.NET Core SDK 3.1.200
.NET Core Runtime 3.1.2

2
下载 LTS 
https://dotnet.microsoft.com/download/dotnet-core

3
测试1
https://pastebin.com/pPGfPmaP

测试2
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/language-specification/introduction

测试3
https://docs.microsoft.com/zh-cn/dotnet/core/tutorials/cli-create-console-app
https://docs.microsoft.com/en-us/dotnet/core/get-started 

> mkdir Proj1
> cd Proj1 (作为 项目名和 namespace)
> dotnet new globaljson --sdk-version 3.1.200
> dotnet new console 
> (dotnet build)
> dotnet run 
>> dotnet bin/Debug/netcoreapp3.1/Proj1.dll

> dotnet publish -f netcoreapp3.1
>> dotnet bin/Debug/netcoreapp3.1/publish/Proj1.dll

> dotnet clean

测试4
https://docs.microsoft.com/zh-cn/dotnet/core/deploying/deploy-with-cli#sample-app
https://www.nuget.org/packages/Figgle 

> mkdir TestApp1
> cd TestApp1 (作为 项目名和 namespace)
> dotnet new globaljson --sdk-version 3.1.200
> dotnet new console 
> dotnet add package Figgle
。。。
> (dotnet build)
> dotnet run 
>> dotnet bin/Debug/netcoreapp3.1/TestApp1.dll
> dotnet publish -f netcoreapp3.1
>> dotnet bin/Debug/netcoreapp3.1/publish/TestApp1.dll
> dotnet clean

测试5
https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/razor-pages-start?view=aspnetcore-3.1&tabs=visual-studio-code 

> mkdir RazorPagesMovie
> cd RazorPagesMovie (作为 项目名和 namespace)
> dotnet new globaljson --sdk-version 3.1.200
> dotnet new webapp 
( > dotnet dev-certs https --trust )
> dotnet add package Figgle
> (dotnet build)
> dotnet run 
 localhost:5000
。。。
> dotnet run 


4
> dotnet tool list -g
> dotnet tool install -g dotnet-script
> cd s1
> dotnet script init s1.csx
> nano s1.csx
> dotnet script s1.csx
> dotnet script
`
#!/usr/bin/env dotnet-script
Console.WriteLine("Hello world!");

var b = DateTime.Now;
WriteLine(b);

Test12();

void Test12(){
    string[] arr = { "abc", "blas", "dsl" };
    Array.ForEach(arr, Console.WriteLine);
    Console.WriteLine();

    arr = arr.Select(s => Char.ToUpper(s[0]) + s[1..]).ToArray();
    Array.ForEach(arr, Console.WriteLine);
    Console.WriteLine();
}

`

参考
https://github.com/dotnet/roslyn/issues/17666
https://www.nuget.org/packages/dotnet-script/
https://itnext.io/hitchhikers-guide-to-the-c-scripting-13e45f753af9


学习区1
显式 SDK ,global.json 
https://markheath.net/post/switching-between-netcore-sdk-versions
https://docs.microsoft.com/en-us/dotnet/core/tools/global-json 

学习区2
确定安装哪个 SDK 版本,最新的 
 .NETCoreApp 3.1      No dependencies needed.
https://www.nuget.org/packages/System.Text.Json

学习区3
LTS
https://dotnet.microsoft.com/download/dotnet-core

学习区4
操作系统支持
https://docs.microsoft.com/en-us/dotnet/core/install/

学习区5
卸载办法
卸载脚本 
https://docs.microsoft.com/en-us/dotnet/core/additional-tools/uninstall-tool 
安装位置 ( echo $DOTNET_ROOT )
/usr/local/share/dotnet 
其他位置 `NuGetFallbackFolder` `~/.nuget`
/usr/local/share/dotnet/sdk
/usr/local/share/dotnet/shared
/usr/local/share/dotnet/host
https://docs.microsoft.com/en-us/dotnet/core/versions/remove-runtime-sdk-versions?tabs=macos#remove-the-nuget-fallback-folder
参考
https://docs.microsoft.com/zh-cn/dotnet/core/versions/remove-runtime-sdk-versions?tabs=macos

学习区6
手动安装办法
https://docs.microsoft.com/en-us/dotnet/core/install/
https://docs.microsoft.com/en-us/dotnet/core/install/sdk 

学习区7
dependency manager (package manager) for .NET Core 3.1
.NET Core is a platform made of NuGet packages.
The following is a list of the key NuGet packages for .NET Core.
https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet-add-package

学习区8
多文件
https://docs.microsoft.com/en-us/dotnet/core/tutorials/cli-create-console-app

包:容器类
non-generic:
数组 ArrayList 
字典 Hashtable

generic:
数组 List<T>
数组 LinkedList<T>
字典 Dictionary<T>
元组 HashSet<T> 

参考
Generics (C# Programming Guide)
================================
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/

参考
System.Collections.Generic
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic?view=netstandard-2.0

.NET 集合和数据结构 - 选择集合
===========================
https://docs.microsoft.com/zh-cn/dotnet/standard/collections # 有两种主要的集合类型:泛型集合和非泛型集合 

集合类型是数据集合(如哈希表、队列、堆栈、包、字典和列表)的常见变体。

集合基于 ICollection 接口、 IList 接口、IDictionary 接口或它们对应的泛型集合。 IList 接口和 IDictionary 接口都派生自 ICollection 接口:因此,所有集合都直接或间接基于 ICollection 接口。 在基于 IList 接口(比如 ArrayArrayListList<T>)或直接基于 ICollection 接口(比如 QueueConcurrentQueue<T>StackConcurrentStack<T>LinkedList<T>)的集合里,每个元素都只有一个值。 在基于 IDictionary 接口(比如 HashtableSortedList 类,Dictionary<TKey,TValue>SortedList<TKey,TValue> 泛型类)或 ConcurrentDictionary<TKey,TValue> 类的集合中,每个元素都有一个键和一个值。 KeyedCollection<TKey,TItem> 类是唯一的,因为它是值中嵌键的值的列表,因此,它的行为类似列表和字典。

包,List<T>

ICollection 是 集合类的更基础的接口,IList 接口和 IDictionary 接口都派生自 ICollection 接口:
因此,所有集合都直接或间接基于 ICollection 接口

对比 List<T> 和 LinkedList<T> :
List<T> 实现了 IList 
语言级别上的 array 也实现了 IList // 
int[] intArray = new int[] {2, 3, 4};
LinkedList<T> 没实现 IList ,仅仅实现了 ICollection

常用的集合类型
=============
https://docs.microsoft.com/zh-cn/dotnet/standard/collections/commonly-used-collection-types

常用 - Array 类
========
https://docs.microsoft.com/zh-cn/dotnet/api/system.array 
转化问题 
IList<PersonData> aPerList = new List<PersonData>(aPersonDataArr);
PersonData[] array = aPerList.ToArray();
https://stackoverflow.com/questions/12948306/how-to-convert-an-array-of-objects-to-list
开销问题 https://stackoverflow.com/questions/202813/adding-values-to-a-c-sharp-array

常用 - List<T> 类
===========
https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.generic.list-1?view=netstandard-2.0

不常用 - IList 接口
https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.ilist 

不常用 - LinkedList<T> 类
https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.generic.linkedlist-1?view=netstandard-2.0
包,Microsoft.AspNetCore.Mvc 
https://gunnarpeipman.com/aspnet-core-linux-command-line 

包,OSharp
https://github.com/dotnetcore/OSharp#03
包,string

https://www.zhihu.com/question/54877128

https://www.c-sharpcorner.com/UploadFile/mahesh/insert-item-into-a-C-Sharp-list/

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated

https://docs.microsoft.com/zh-cn/dotnet/csharp/tutorials/exploration/interpolated-strings

https://docs.microsoft.com/en-us/dotnet/csharp/

简便写法,静态类型但尝试忽略类型,动态语言化,去掉不必要的 带来干扰的东西 脑力负担,走几个项目就知道了

处理出活儿 更快 非创新;可熟练出活儿的 (学习手册)
https://www.v2ex.com/t/658977#r_8776718

可熟练出活儿并给人展示的(成果):字符串、下载、数据库操作、倒数据 (Web API 输出)、倒页面 (前后端分离、页面驱动设计)

对不同的人 展示不同的技能 
https://segmentfault.com/a/1190000022253028

面向未来的技能
https://segmentfault.com/a/1190000022253028

给他们一种错觉:一个人就是一条生产线的感觉,熟练使用生产资料,给他们一种‘赚了’的感觉,其实是 模板 攒模板之后 而已。人穷莫入众,言轻莫劝人

复制这样的人的知识体系,包括对 C# 的包管理系统 的看法、攒过的模板,人家做过的东西 都给做一遍
https://segmentfault.com/a/1190000022254307
书目参考

MS官方之前

https://www.ctolib.com/docs-csharp-c-index.html 

https://www.php.cn/csharp/csharp-tutorial.html

MS官方之后

C# 文档
=======
https://docs.microsoft.com/zh-cn/dotnet/csharp/






changsj
211 声望11 粉丝

changsj.


« 上一篇
无名之路6
下一篇 »
无名之路8