(读书笔记).NET大局观-.NET语言(1)
通用语言运行时
通用语言运行时被明确设计为支持多种语言,一般而言,建立于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 |
位整数 |
-128-127 |
SByte |
||
byte |
位整数 |
0-255 |
Byte |
||
short |
位整数 |
-32768-32767 |
Int16 |
||
ushort |
位整数 |
0-65535 |
UInt16 |
||
Int |
位整数 |
-2147489648-2147483647 |
Int32 |
||
uint |
位整数 |
0-42994967295 |
UInt32 |
||
long |
位整数 |
-263-263 |
Int64 |
||
ulong |
位整数 |
0-264 |
UInt64 |
||
float |
位单精度实数 |
1.5*10-45-3.4*1038 |
|||
double |
位双精度实数 |
5.0*10-324-1.7*10308 |
|||
demcimal |
位十进制实数 |
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更好的语言吗?
这个问题没有客观答案,即使真的如此也无足轻重,仅仅因为编程语言而选择一个开发平台,就像仅仅喜欢车上的收音机而买下那辆车一样,你当然可以这么做,但如果你基于通盘考虑而做下决定,你会更开心。
(读书笔记).NET大局观-.NET语言(1)的更多相关文章
- 读书笔记之:C语言深度剖析
读书笔记之:C语言深度剖析 <C 语言深度解剖>这本书是一本“解开程序员面试笔试的秘密”的好书.作者陈正冲老师提出“以含金量勇敢挑战国内外同类书籍”,确实,这本书中的知识点都是一些在面试中 ...
- 【读书笔记】《C语言 从入门到精通》(第三版)笔记
C语言,上学的时候都没学好,没想到现在却靠它吃饭.因为对C语言还是比较熟悉,所以买这本书是用来当"字典"用的.所以下面的笔记不会有很基础的内容. 1.书籍介绍 2.结构体 3.[C ...
- Machine Learning for hackers读书笔记(一)使用R语言
#使用数据:UFO数据 #读入数据,该文件以制表符分隔,因此使用read.delim,参数sep设置分隔符为\t #所有的read函数都把string读成factor类型,这个类型用于表示分类变量,因 ...
- 《30天自制操作系统》读书笔记(3) 引入C语言
这一次的学习相当曲折, 主要是因为粗心, Makefile里面的错误导致了文件生成出现各种奇奇怪怪的问题, 弄得心力交瘁, 因此制作过程还是尽量按着作者的路子来吧. 作者提供的源码的注释在中文系统下是 ...
- 《R语言实战》读书笔记--第一章 R语言介绍
1.典型的数据分析过程可以总结为一下图形: 注意,在模型建立和验证的过程中,可能需要重新进行数据清理和模型建立. 2.R语言一般用 <- 作为赋值运算符,一般不用 = ,原因待考证.用-> ...
- [读书笔记3]《C语言嵌入式系统编程修炼》
第五章 性能优化 5.1 使用宏定义 在C语言中,宏是产生内嵌代码的唯一方法.对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法. 写一个"标准"宏MIN ...
- [读书笔记2]《C语言嵌入式系统编程修炼》
第3章 屏幕操作 3.1 汉字处理 现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能.例如,一个微波炉的LCD上没有必要提供显示&qu ...
- [读书笔记1]《C语言嵌入式系统编程修炼》
大学前两年一直搞的是单片机,写的是嵌入式C语言程序,走过了不少弯路,现在感觉仍然在走弯路.有幸偶尔看到了这篇文章,深感自己以前写程序的时候存在很多误区.现写篇博客做下总结. 作者:宋宝华出处:天极 ...
- 《数据结构与算法分析:C语言描述》读书笔记------List的C语言实现
List的简单实现.在GCC下测试通过. list.h #ifndef _List_H /*List数据结构的简单实现*/ struct Node; typedef struct Node Node; ...
- 代码的未来读书笔记<二>
代码的未来读书笔记<二> 3.1语言的设计 对Ruby JavaScript Java Go 从服务端client以及静态动态这2个角度进行了对照. 这四种语言因为不同的设计方针,产生了不 ...
随机推荐
- WCF技术剖析之二十一:WCF基本异常处理模式[中篇]
原文:WCF技术剖析之二十一:WCF基本异常处理模式[中篇] 通过WCF基本的异常处理模式[上篇], 我们知道了:在默认的情况下,服务端在执行某个服务操作时抛出的异常(在这里指非FaultExcept ...
- Python学习笔记 — 函数
函数是对程序逻辑进行结构化或过程化的一种编程方法.函数具有两个方面的意义:1)将代码分块,易于管理和阅读:2)最大化代码复用和最小化代码冗余,节省空间,有助于保持一致性. 1. 函数定义 Python ...
- java.lang.ClassNotFoundException: org.apache.catalina.loader.DevLoader
eclipse tomcat报错:org.apache.catalina.loader.DevLoader java.lang.ClassNotFoundException: org.apache.c ...
- java中int,char,string三种类型的相互转换
如何将字串 String 转换成整数 int? int i = Integer.valueOf(my_str).intValue(); int i=Integer.parseInt(str); 如何将 ...
- Github-Client(ANDROID)开源之旅(四) ------ 简介Roboguice
Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC),Guice非常小而且快.Guice是类型安全的,它能够对构造函数,属性,方法(包含任意个参数 ...
- Jquery文本框小例(必填框)
<script src="../JavaScript/jquery-2.0.2.min.js"></script> <script type=&quo ...
- 【linux】linux启动流程
欢迎转载,转载时请保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http:// ...
- xcode-build/version-bump
# xcode-build-bump.sh # @desc Auto-increment the build number every time the project is run. # @usag ...
- Python爬虫入门三之Urllib库的基本使用
转自http://cuiqingcai.com/947.html 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由 ...
- 安装bower
1.前提事先安装好node 和 npm D:\DEVELOP\HTML>node -v v0.10.29 D:\DEVELOP\HTML>npm -v 1.4.14 2.安装bower n ...