通用语言运行时

通用语言运行时被明确设计为支持多种语言,一般而言,建立于CLR之上的语言可以获得共同的良好处理。通过一个宏大的核心语义集,CLR还界定了一个以它为基础的典型编程语言的大体部分。例如对于任何一种基于CLR的语言,单单领会“CLR所定义的标准类型”如何被映射到特定语言宏,就占了很大部分的学习量,当然你还必须学习特定语言的语法和控制结构,然而一旦掌握了CLR所提供的东西,面对任何一种建立于其上的语言,你已经占领的先机。

题外话:JAVA在.NET框架中的处境

从一开始,微软就提供了一个.NET框架版的JAVA编程语言,J#

在两种情况下J#是恰当的选择:

第一种情况:需要将现有的JAVA代码转移到.NET框架

第二种情况:经验丰富的JAVA开发人员迁移到.NET框架中,人们常常有一种对自己所熟悉语法的强烈的附属感觉,因此在一个熟悉的语言中工作会使得过渡更加容易。

所有的C#程序由一定数量的类型组成,其最外源必定是类,接口,结构,枚举或者委托。还有命名空间,所有方法和字段必须隶属于上述的类型之一,这意味着C#不允许全局变量和全局函数。

Public double  good(double  s)

{

ReturnSystem.Math.Sqrt(s);

}

good函数带了一个参数和一个返回值,这些参数都已传值得方式传入,这是C#的缺省行为,意味着函数返回时,函数内部对参数值所做的更改,不会被调用端看到,如果参数前面标以关键字ref,这就会造成引用方式传递参数,如此一来函数内部对参数所做的任何改变,就都会反映给调用端。

C#不能像C/C++那样吧参数也设为void,使得,void的唯一用途就是致命某个方法不传回任何值。

C#提供的类型

sbyte

有符号8位整数

-128-127

SByte

byte

无符号8位整数

0-255

Byte

short

有符号16位整数

-32768-32767

Int16

ushort

无符号16位整数

0-65535

UInt16

Int

有符号32位整数

-2147489648-2147483647

Int32

uint

无符号32位整数

0-42994967295

UInt32

long

有符号64位整数

-263-263

Int64

ulong

无符号64位整数

0-264

UInt64

float

32位单精度实数

1.5*10-45-3.4*1038

double

64位双精度实数

5.0*10-324-1.7*10308

demcimal

128位十进制实数

1.0*10-28-7.9*1028

           

对于属性的一种“极端”的观点,永远不要使用公开字段,属性总是一个更好的选择。

结构

CTS没有明确定义一个结构类型,而C#结构是基于类的,并且像类一样,结构可以实现接口,包含方法,字段,属性,不过与类不同,结构是值类型而非引用类型,这意味着他们被分配于堆栈之上,此外值类型不能参与继承,因此C#结构不能参与继承自其它类型,

委托和事件

传递一个指向方法的引用是件合情合理而且稀松平常的事情,假设你需要通知代码,请它于特定事件发生时代用你所提供的一个方法,那么你就需要某种办法将运行期间将回调函数传入。C++中你可以通过“传入方法的地址”办到这一点,然而在.NET框架类型安全的世界里,并不允许地址传递,但这并不能说NET之中就没有这个需求了

这里就用到了委托和事件

CTS定义了引用类型委托,目的正是为此,一个委托就是一个对象,它包含一个引用,后者指向一个“具有特定签名”的方法,一旦你创建了它并加以初始化。就可以将其作为参数传入其他方法并调用之。

详细参见博文:http://blog.csdn.net/yixiantian7/article/details/10586075

NetFramework的编码规范:

  委托类型的名称都应该以EventHandler结束。

委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一个 EventArgs类型(或继承自EventArgs)。

public delegate void BoiledEventHandler(Object sender,BoiledEventArgse );

  事件的命名为 委托去掉 EventHandler之后剩余的部分。

public event BoiledEventHandler Boiled; //声明事件

  继承自EventArgs的类型应该以EventArgs结尾。

// 定义BoiledEventArgs类,传递给Observer所感兴趣的信息

publicclass BoiledEventArgs : EventArgs {

publicreadonly int temperature;

publicBoiledEventArgs(int temperature) {

this.temperature = temperature;

}

  这里还有一个约定俗称的规定,就是订阅事件的方法的命名,通常为“On事件名”,比如这里的OnBoiled。

protected virtual voidOnBoiled(BoiledEventArgs e) {

if(Boiled != null)

{ // 如果有对象注册

Boiled(this,e);  // 调用所有注册对象的方法....在这个地方引发了事件

}

事件所使用的委托称为事件处理器(eventhandler)

它其实就是一个普通的委托,不过,NET框架为这些事件处理定义了两个约定

1 事件处理器不返回任何值,也就是它的返回值是void

2 事件处理器总是接受两个参数,第一个参数标识事件的发起者,按照惯例命名为sender

其类型为system.object(在C#中 就是object类型,他是system.object的一个别名)这使得事件接收者反过来于触发事件对象进行通讯更加方便,第二个参数包含事件发起者调用事件处理器传入的全部数据,习惯上将其命名为e,其类型是System.EventArgs或是继承自System.EventArgs的类型

下面就是是个事件处理器的例子

Public delegatevoid MyEventHandler(object sender, MyEventArgs e)

其他一些C#特性:

命名空间

异常处理

参见博文:http://blog.csdn.net/yixiantian7/article/details/10390117

关于属性attributes(用实例来讲这个更容易理解)

参见博文:http://www.cnblogs.com/luodong/archive/2009/07/14/1523012.html

(一) 在前台用JS写的脚本方法,除了可以直接用在前台控件的属性中,还可以在后台运用。即在后台页面加载时,调用JS方法。语法格式有两种,如下:

1.第一种写法:控件ID名.Attributes.Add(“事件名称”,“JS方法”);

如:一个按钮控件Button1.Attributes.Add(“onclick”,“returnconfirm('确认?')”);

2.另一写法:控件ID名.Attributes["事件名称"]=“JS方法";

如:前台写了一个JS方法: function ISCheck(){。。。。。。};

Button1.Attributes[“onclick”]="ISCheck()";

PS:另外还可以控制某一个文本框的属性,比如文本框的大小,宽度等。

如:TextBox1.Attributes.Add(“width”,“80px”);

(二)前面是第一部分,是学习的别人的.下面提出一点自己的:

在后台用this.form名字.attributes["名称"]=...储存名字.

在前台调用: var f=document.form名字;    变量=f.attributes["名称"].value;

编写不安全代码

在c#使用指针就意味着不依赖垃圾回收机制来帮你管理内存,在这些情况下,C#允许你使用指针,这就是我们常说的”不安全代码”

在不安全代码中使用指针,这样就带来了指针具有的好处和缺点,为了使这种不全的行为尽可能安全一点,C#要求所有这种代码必须明白标以关键字unsafe,在一个不安全的放阿飞内我们可使用fiexd语句锁定一个或者多个位于托管堆上的引用类型(有时候这种做法称为“钉住”(pinning))

预处理指令

和C/C++不同的是,C#没有预处理器,编译器对预处理器的大多数功能都提供了内建支持

例如:C#预处理器指令包括#define,这是一个C/C++开发人员习以为常的术语,然而这个术语不能被定义“以一个词代表一个字符串”,#define只能用于定义记号,记号可以和#If指令一起使用,提供条件编译的功能

题外话:

C#是一个比java更好的语言吗?

这个问题没有客观答案,即使真的如此也无足轻重,仅仅因为编程语言而选择一个开发平台,就像仅仅喜欢车上的收音机而买下那辆车一样,你当然可以这么做,但如果你基于通盘考虑而做下决定,你会更开心。

转载于:https://www.cnblogs.com/pangblog/p/3297122.html

(读书笔记).NET大局观-.NET语言(1)相关推荐

  1. c语言程序设计读书笔记3000字,C语言程序设计读书笔记题目

    读书笔记注意事项: 1. 读书笔记要求至少有六个题目,在一类.二类.三类题目中各选两题,具体题目选择由学生自行选择. 2. 每个题目必须包含所选题目,以及具体题目的程序实现过程,要求每行语句后都需要有 ...

  2. 读书笔记之《C语言深度剖析》第一章:关键字

    第一章引言 什么是定义及声明? 定义:定义是编译器创建一个对象,并且为这个对象分配一块内存并给它取上一个名字,这个名字就是我们经常所说的变量名或对象名. 声明:1.告诉编译器该变量名已经匹配了一个内存 ...

  3. 《R语言实战》读书笔记--第一章 R语言介绍

    1.典型的数据分析过程可以总结为一下图形: 注意,在模型建立和验证的过程中,可能需要重新进行数据清理和模型建立. 2.R语言一般用 <- 作为赋值运算符,一般不用 = ,原因待考证.用-> ...

  4. [读书笔记][golang]《go语言-云动力》

    花了一些时间,读了樊剑虹的<go语言-云动力>,就这本书的整体情况来讲,还是值得读一读的,书中讲了一些另辟蹊径的东西,这可能是其他go语言书中不曾有的东西,但是就专业性来讲,是不值得推荐读 ...

  5. 【读书笔记】《Javascript语言精粹》

    为什么80%的码农都做不了架构师?>>>    第二章 语法 通过检测 object.hasOwnProperty(variable)来确定属性名就是改对象的成员,还是从其原型链里找 ...

  6. C专家编程读书笔记一:C语言晦涩难懂的声明

    理解C语言声明的优先级规则: 声明从它的名字开始读取,然后按照优先级顺序依次读取 优先级从高到低依次是: B1     声明中被括号括起来的那部分 B2     后缀操作符:括号()表示是一个函数,二 ...

  7. 进入32位模式并导入c语言教程,《30天自制操作系统》读书笔记(3) 引入C语言

    这一次的学习相当曲折, 主要是因为粗心, Makefile里面的错误导致了文件生成出现各种奇奇怪怪的问题, 弄得心力交瘁, 因此制作过程还是尽量按着作者的路子来吧. 作者提供的源码的注释在中文系统下是 ...

  8. 《Go语言圣经》第一章 - 读书笔记

    <Go语言圣经>第一章 - 读书笔记 第一章 Go语言入门 01 Hello World 02 命令行参数 练习 练习1.1 练习1.2: 练习1.3: 03 查找重复的行 例子运行 du ...

  9. 学习Unix,可从事什么样的工作(1)《精通Unix下C语言与项目实践》读书笔记(3)...

    <精通Unix下C语言编程与项目实践>读书笔记(new) 文章试读 不拘一个遍程序系列:编程序不能一个脑袋钻到底,有时要学会变通,即所谓的曲线救国.一.二.三.四 职场规划:一些杂七杂八的 ...

  10. 《精通Unix下C语言与项目实践》读书笔记(16)

    <精通Unix下C语言编程与项目实践>读书笔记(new) 文章试读  不拘一个遍程序系列:编程序不能一个脑袋钻到底,有时要学会变通,即所谓的曲线救国.一.二.三.四 职场规划:一些杂七杂八 ...

最新文章

  1. LinearAlgebra_4
  2. boost::timer
  3. 《解剖PetShop》系列之三
  4. git 查看某些文档的历史版本_Git 教程(二)log 命令的使用
  5. 独家=垄断?从抖音快手电影宣发签独家谈起
  6. 赚钱第一,投资第二,才是正确的财富获取方式
  7. 【毕业答辩】你的论文答辩PPT准备好了吗?
  8. (Origin)如何复制文件到另一个项目
  9. Kafka设计解析(三):Kafka High Availability (下)
  10. java系列视频教程下载
  11. SmartUpload问题
  12. 百度爬虫robots.txt文件规范
  13. 在html中对页面大小的设置吗,网页设计一般页面尺寸怎么设置呢?
  14. 【GraphVisual】画节点与线以及移动节点线随着移动
  15. 网络分析仪测试线损_手把手教你用2端口网络分析仪进行阻抗调试分析--网络分析仪维修...
  16. R语言绘制柱状图(bar plot)
  17. QT-QML制作登录界面
  18. 地心坐标系转地理坐标系(NED)
  19. 怎么压缩图片,压缩图片轻松搞定
  20. 使用微信jssdk接口调用语音,图片,分享等功能

热门文章

  1. html如何给文字添加阴影效果,css中怎么给字体添加阴影效果
  2. stk 坐标系_STK学习-坐标系
  3. python3 opencv_Python3 OpenCV3 图像处理基础
  4. 对C语言程序进行编译时 针对以下情况,linux书上划的题的答案.doc
  5. linux下备份mysql上传到网盘_Linux命令行上传文件到百度网盘
  6. 拥抱AI技术,赋能智慧工业
  7. 欧拉角与四元数互转,及四元数slerp球面线性插值算法
  8. 2021-08-29概率论—第四章随机变量的数字特征
  9. SVD与PCA的区别
  10. 读后感和机翻《人类因果迁移:深度强化学习的挑战》