《精通c#》笔记之初实.NET平台和如何创建简单的c#程序(一)

今天在微博上看到一个话题叫精致的程序媛,哈哈,希望自己慢慢也能成为精致的程序媛啦~

努力✊

先贴上我在知乎上找的一个链接:非常有用,快夸我是小天使!

http://www.cnblogs.com/figure9/p/developer-reading-list.html#csharp


 

最近在学习c#,因为之前也没有接触过,所以在网上搜了一下,这本书适合c#入门,讲的都是比较基础的知识点,

所以准备一边学习,一边记笔记

这篇笔记是看到第一二章后记录和实践的,后续会继续更新笔记

第一章:初实.NET平台

(1)概念:是一个运行库的环境,一个全面的基础类库,支持多种编程语言

(2)三个关键实体:

CLR(公共语言运行库common language runtime)

        定位,加载,管理.NET同时负责一些底层的工作(内存管理,应用托管,处理线程,安全检查)

CTS:(公共类型系统common Type system)

描述运行库所支持的所有可能的数据类型和编程结构,指定实体之间如何交互,规定他们在 .Net元数据格式中的表示

CLS:(公共语言规范commonlanguage specification)

让所有的.NET语言都支持的公共类型和编程结构

BCL:

适用于全部.Net程序语言的基础类库,封装各种基本类型,线程,文件输入/输出图形绘制以及各种外部硬件设备的交互,还支持在实际应用中用到的一些服务

  

C#的核心特点的一部分:

(1)C#支持类型属性可选参数,允许重载操作符,支持创建结构,枚举,回调函数(委托)我理解的委托相当于函数指针

(2)不需要指针,c#不需要直接对指针进行操作

(3)垃圾收集器能够自动管理内存不支持delete关键字

(4)构建泛型类型和泛型成员的能力:在和泛型项交互时可以定义很多占位符

(5)支持匿名的方法:允许在任何需要委托类型的地方提供内联函数

(6)使用partial关键字可以跨多个代码文件定义单个类型的能力

(7)支持强类型的查询(LINQ),用于和各种形式的数据进行交互

(8)支持匿名类型允许建模一个类型的形而不是行为

(9)使用拓展方法拓展既有类型(没有子类)功能的能力:没有子类也可以拓展

(10)包含Lambda

操作符(=>)进一步简化委托类型的使用

(11)新的对象初始化语法:允许在创建对象时设置属性的值

(12)支持可选的方法参数和命名的方法参数

(13)支持通过dynamic在动态运行时查找成员

(14)泛型类型:使用协变逆变,在泛型数据和普通System.Object集合之间进行相互映射

(15)一对关键字(async 和 await),简化多线程和异步编程

.cs文件编译成功之后生成的时CIL,不是与平台相关的指令

看.cs文件编译成功之后会生成哪些文件:

 


不会直接把源代码编译成特定的指令集而是编译为CIL的好处:语言集成

然后就会将CIL代码编译成特定平台的指令:

CIL在使用之前必须进行即时编译,将CIL代码编译成有意义的CPU指令的工具---》JIT(即时)编译器(会用适合目标操作系统的方式将结果缓存在内存中,下一次调用就不需要编译CIL了)

相关概念:

托管代码:必须在.Net运行库下运行的代码

程序集:包含托管代码的二进制单元

非托管代码:不能直接在.NET运行库承载的代码 

.NET二进制文件不包含特定于平台的指令,包含的是与平台无关的IL(中间语言)和(类型元数据)

 


.NET二进制文件:IL(与平台无关,中间语言)MSIL CIL 是一个概念

 元数据:描述每一个二进制文件中定义的类型(结构,类,枚举)和每个类型的成员(属性,方法,时间)

  清单:用来描述程序集本身的元数据, 程序集本身也会使用元数据进行描述,这些元数据叫清单(记录程序集的当前版本,文  化信息和正确执行所需的外部引用程序集的列表)

生成程序集清单是编译器的工作

重点看这三大类型:

CTS

(1)五种类型

  •     类类型
  •  接口类型:    interface:通过一个给定的类或者结构来实现

    接口对类的自身没有什么用,当一个类或者结构实现一个给定接口时,以多态方式通过接口引用来使用提供的功能,C#的接口一般声明成public,其他程序集中的类型就可以实现其行为

  • 结构类型:C#的结构类型可以包含字段,可以包含参数化构造函数,可以定义方法

 

  •     枚举类型

    用来组成名称/值对

    枚举类型派生自System.Enum 这个基类定义了一些有趣的成员,允许通过编程提取,操作和变换底层的名称/值对


  • 委托类型(类似于类型安全的C风格的函数指针)

    不同之处是:.Net是派生自System.MulticastDelegate的类,不是简单的指向原始内存地址的指针:

    通过delegate来声明的

 

相当于是一个指向返回值为int,两个int参数的函数指针

CTS类型成员:大部分的类型可以含有任意数量的成员

类型成员{构造函数终结器,静态构造函数,嵌套类型,操作符,方法,属性,索引器,字段,只读字段,常量,事件}

CTS建立一套定义明确的核心数据类型


CLS

CLS描述支持.Net的编译器必须支持的最小的和最完全的特征集,以生成可由CLR承载的代码,同时可以被其他语言用统一的方式进行访问 

运行库:执行给定编译代码单元所需的外部服务的集合

.NET运行库提供了一个定义明确的运行库层,可以被支持.NET的所有语言和平台共享


过程:Mscorlib.dll自动加载,由它负责将需要的程序集导入内存,引擎的主要任务是:负责解析程序集的位置,读取其中包含的元数据,在二进制文件中发现请求的类型

 在内存中为类型分配,将关联的CIL编译成特定的平台,执行所需要的类型安全检查,运行代码

程序集/命名空间/类型的关系

命名空间相当于程序集相关类型的一个分组,一个程序集可以包含任意个命名空间,一个命名空间可以包含多种类型,方便从逻辑上理解和组织关联类型的方式


简单介绍完概念,下面就是进入第二章:创建c#程序

1)记事本的方式创建:

创建cs文件c.csc

代码:

using System;
class TestApp
{
	static void Main()
	{
		Console.WriteLine("Hello world");
	}
}  

用visual studio 命令行工具进入到文件所在的目录下:



修改代码:

using System;
using System.Windows.Forms;
class TestApp
{
	static void Main()
	{
		Console.WriteLine("Hello world");
		MessageBox.Show("Hello world!");
	}
}  

重新编译:编译命令:


结果:



出现窗体


2)如何引用多个外部程序集:

用分号分隔的列表列出各个程序集:

 

3)如何编译多个源文件:

新建一个cs文件,内容如下:
using System;
using System.Windows.Forms;

class Hello
{
	public void Speak()
	{
		MessageBox.Show("Hello world");
	}
}
修改之前的c.cs文件:
using System;
//using System.Windows.Forms;
class TestApp
{
	static void Main()
	{
		Console.WriteLine("Hello");
		//MessageBox.Show("Hello world!");
		Hello h = new Hello();
		h.Speak();
		
	}
} 

如下编译,运行:

 


结果: 



4)什么是c#响应文件

C#响应文件包含了在当前程序的编译期间所要用到的所有的指令

文件的拓展名为*.rsp

文件内容:
/r:System.Windows.Forms.dll
/target:exe /out:c.exe *.cs

将rsp文件放在同一目录下:

进行以下命令,执行成功:

  

可以指定多个rsp文件作为输入
Csc @FirstFile.rsp  @SecondFile.rsp @ThirdFile.rsp

但是要记住编译器会根据所遇到的命令选项作相应的处理
在响应文件前的命令行中被显式列出来的标志将被指定的*.rsp文件覆盖:

下面进行演示:新建一个文件3.cs

键入以下内容:
using System;
using System.Windows.Forms;

class Hi
{
	public void Speak()
	{
		MessageBox.Show("Hi");
	}
} 

 

 

运行结果:

 

如果把/out放在后面,执行结果如下:




 

虽然名字覆盖掉,但是运行的结果却跟之前一样

标志就会覆盖相应文件里面的设置

接下来主要学习用visualstudio 来创建c#程序



熟悉visualstudio的各个工具:

(1)    如何引用外部程序集


 


勾选:

 

 删除:

选中按delete键:结果


(2)    查看Project Properties:增强的项目配置编辑器



 

(3)class view工具:从面向对象的角度显示当前项目里的所有类型

视图==》类视图

 

(4)

对象浏览器:检查在当前项目中被引用的程序集

视图==》对象浏览器

 

(5)对既有代码进行重构:

 

选中重构的代码,右击----》快速操作和重构èExtract Method:修改重构的名称:


 

(6)    代码拓展和围绕



(7) 可视化的class designer

选中项目=》右击点查看=》查看类图


选中项目而不是解决方案,右击---》查看---》查看类图


(8) 类详细信息:view=>其他窗口=》类详细信息





从工具箱拉出来一个新类,修改名称,添加新的string字段,查看代码:





可以在类图上直接添加字段:查看源代码:源代码也会相应自动修改


新建新类:

在类图中从工具箱中拖出继承的箭头—》右击查看代码

代码自动生成








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值