C#认识
C#与.NET同时由微软发布,出身时间是2000年。
.NET Framework是一个运行环境,VS软件是一个集成的开发环境。
需要从VS软件上的开发工具编写C#代码再通过.NET运行平台编译执行。
扩展:这让我想起了华为的方舟编译器,感觉华为就是想做个类似.Net的平台吧。把安卓程序编译成方舟IR转换器然后就可以跑在华为自己开发的vm和runtime上,这样以后对于任何操作系统和设备,只需要实现那个os和设备的vm和runtime就行了。
.NET框架认识
.NET Framework是为了支持多种语言而设计的。
目前用得最多的稳定运行平台是2015版本的.NET4.6(公司角度)。
.NET的框架类库有ASP.NET网站程序、Windows 应用程式、XML等。
其实ASP.NET网站程序包含有前端web forms窗体(HTML+CSS+JS)和web services服务端(C#)。
CTS通用类型系统(Common Type System)
任何以.NET平台作为目标的语言必须建立它的数据类型与CTS的类型间的映射。所有.NET语言共享这一类型系统,实现它们之间无缝的互操作。这些语言所写出来的程序,如果想要有最佳的相容性,以便互相调用(invoke) 或继承,这些语言之间就必需取得一个共同的subset,有共同遵守的规范,这就是CLS 。
CLS通用语言规范(Common Language Specification)
CLS制定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其他.NET语言之间实现互操作性所需要的完备特征。CLS是CTS的一个子集。这就意味着一种语言特征可能符合CTS标准,但又超出CLS的范畴。例如:C#支持无符号数字类型,该特征能通过CTS的测试,但CLS却仅仅识别符号数字类型。因此,如果用户在一个组件中使用C#的无符号类型,就可能不能与不使用无符号类型的语言(如VB.NET)设计的.NET组件实现互操作。
CLR公共语言运行库(Common Language Runtime)
简单地说,CLR是CTS的实现,也就是说,CLR是应用程序的执行引擎和功能齐全的类库,该类库严格按照CTS规范实现。作为程序执行引擎,CLR负责安全地载入和运行用户程序代码,包括对不用对象的垃圾回收和安全检查。在CLR监控之下运行的代码,称为托管代码(managed code)。
.NET程序执行原理
创建一个控制台应用
前言:
写代码的时候,结合其他开发语言去共同思考语言的共通性。
其实一开始学习C#基础,就是接触面向对象了,如C#、Java都是如此,所有为什么有人会说学Java难,其根本是要花长时间去学习面向对象的原理和语法类型,因为代码必须要按照(命名空间=>类=>函数)这样的面向对象标准形式去写代码。
而JavaScript这类开发语言,定变量定函数无严格标准规范,这些都是带有弱类型的形式,所以没有必须(命名空间=>类=>函数)这种面向对象标准要求,才导致这类弱类型语言上有先天的异常处理会比强类型语言更难处理。
所以才流传着JavaScript入门简单,精通难,而C#、C++、C、Java入门难,精通更难。
以下就是一个非常简单的面向对象代码对比,当然,面向对象有封装,继承,多态,而这里只有封装演示。
C#代码:
//类似于引入底层封装好的模块代码
using System;
//命名空间为 Hello_World
namespace Hello_World
{
//类名为 Hello
class Hello
{
//main函数
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.ReadKey();
}
}
}
Node代码:
//引入模块
const http = require('http');
//创建类
class Hello
{
//构造原型链
constructor(args)
{
this.Main();
}
//main函数
Main()
{
console.log("Hello World!");
}
}
//实例化
new Hello();
不同点:
C#:
- 模块=>命名空间=>类=>函数。
- C#中的Main方法是必须的,这是一个入口函数,用作运行程序。
- C#中的每一个方法函数、函数变量、常量等都需要标记类型。
Node:
- 模块=>类=>函数=>实例化。
- 不需要入口函数,但需要实例化函数并且调用函数才能执行。
- 可以不标记类型,直接
var
。
共同点:
- 注释相同,可单行
//
和多行/****/
。 - 都需要引入底层封装的模块。
- 都有封装、继承、多态性,能够定义私有成员变量,安全函数规范。
- 都有静态方法和实例方法,静态方法使用类名调用,实例方法使用实例化后的对象进行调用。
总结:
从以上可以发现,其实JavaScript也可以面向对象编程,它也有一个Node服务端环境,其本质是浏览器的V8引擎摘下来用,ES6后的语法糖还可以模仿面向对象的编程写法,而且Node也支持使用TypeScript(微软爸爸做的JavaScript升级版)作为一门真正的强类型语言给前端开发者学习。所以Node的出现,使得前端的地位摇身一变,到今时今日顺理成章地成为了前端的全栈develop了。
创建一个窗体应用
简单熟悉下控件即可掌握,讲解略。
控制台应用和窗体应用
控制台应用程序是没有独立窗口的程序,一般在命令行运行,其输入输出通过标准的IO进行;
Windows窗体应用程序是在计算机上运行的客户端应用程序,可以显示信息、请求用户输入,以及通过网络与远程计算机进行通信,比如大家常用的QQ软件、360安全卫士等。
语法认识
C#教程推荐:https://docs.microsoft.com/zh-cn/dotnet/csharp/
边写边看练习,大体语法相同。
不同点在于需要类型指定,语法拼写大小写有点不同。
语法规则(命名、标识符)
1、命名空间、类、方法函数、都必须首字母大写。
2、命名空间组合名可以为驼峰命名、但最好在驼峰处加下划线隔开。(如Hello_World)
3、类成员可以首字母大写前再加上下划线,表示成员属性。(如_UserName)
4、方法函数使用驼峰命名、首字母大写。(如NumChange)
5、其余变量、常量可随意。(如num、NUM、Num、Num110)
C#关键字(保留字)
C#关键字意思是,写代码时不能用它这些已有的名称作为变量名常量名方法名等。
资料:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/