CLR 公共语言运行库
没有CLR的存在,就不能讲该中间件转换成对应操作系统中的机器指令。
程序集是非完全编译的产物,它兼备了源代码和本地代码的特性,是一种介于源代码和本地代码之间的独立存在的一种数据结构,它同时具有可读性和可执行性。
程序集组成:IL、元数据、清单、资源等。
程序集特征:语言独立、二级制兼容、重用性、部署方便。
.NET程序集并不是最终可以运行在操作系统中的机器指令,它只是介于源代码和机器指令之间的一个中间件,没有CLR的存在,就不能将该中间件转换成对应操作系统中的机器指令。
可读性:对于开发者来讲,可以从程序集中读取出类似元数据、IL代码或者资源等信息。
可执行性:对于最终用户,程序集是可以在CLR中运行的。
一些编程约定:
一个线程可以调用多个方法,而一个方法又可以被多个线程调用。
哪个线程调用了方法,哪个线程就叫做这个方法的调用线程,方法在哪个线程中运行,哪个线程就是该方法的当前线程。
调用指我们调用系统的方法,回调指系统调用我们写的方法。
.NET中的回调主要是通过委托来实现的。
两种可能引起非线程安全的情况:
①两个线程访问一个对象,前一个操作还未结束,后一个操作就开始了;②多个线程同事访问一个对象。
托管资源(如内存)由CLR管理,非托管资源指对象使用到的一些托管环境之外(比如操作系统)的资源,.NET中对象使用到的非托管资源主要有IO流、数据库连接、Socket连接、窗口句柄等各种直接与操作系统相关的资源。
框架算是不完整的应用程序,类库多半指能够提供一些具体功能的类集合,它包含的内容和功能一般比框架更简单。
JavaScript基于对象。
使用interface关键字定义的接口类型,它代表编程过程中的一种“协议”,是代码中调用方和被调用方必须遵守的契约,如果一方不遵守,那么调用就不会成功:
1)调用方必须存在一个接口引用;2)被调用方必须实现该接口。
数据类型:
值类型赋值就是一种浅复制。
对象进行浅复制时,只将对象的直接成员一一拷贝,当对象包含有引用类型成员时,源对象与副本之间有关联;
对象进行深复制时,会将对象的所有成员(包括直接成员与间接成员)依次进行拷贝,不管对象是否包含引用类型成员,源对象与副本都无任何关联。
string类型是一个特殊引用类型,它的判等不同于其他引用类型去比较对象引用是否指向堆中同一实例,而是和值类型判等一直,比较对象内容是否一一相等。除此之外,string类型还是不可改变类型,对string对象的任何操作均不能改变该对象。
结构类型不支持继承,可以实现接口。
构造函数用于创建类的实例,并对实例进行初始化操作。一般情况下,构造函数是实例构造函数。
派生类中只有继承的虚方法或抽象方法可以被重写,并且静态方法不能被重写。
sealed(密封)与abstract(抽象类)互斥。
当类中某些成员不需要创建实例实现,则可将其声明为静态类成员。
重载是方法的名称相同,函数签名不同,进行多次重载以适应不同的需要;
重写(override)是进行基类中函数的扩展或改写,其签名必须与被重写函数保持一致。
this 引用类的当前实例;
base 派生类访问基类成员。