.NET基础知识(一)
1、CLR、CTS、CLS分别是什么意思?
CLR(公共语言运行时,Common Language Runtime),和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离。【另有:.NET提供了一个运行时环境,叫做公共语言运行时(CLR),是一种多语言执行环境,支持众多的数据类型和语言特性。它管理着代码的执行,并使开发过程变得更加简单。这是一种可操控的执行环境,其功能通过编译器与其他工具共同展现。】
CTS(公共类型系统,又叫通用类型系统,Common Type System),.NET定义的一个类型标准。这个类型系统不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展。任何以.NET平台作为目标的语言必须建立它的数据类型与CTS的类型间的映射。所有.NET语言共享这一类型系统,实现它们之间无缝的互操作。该方案还提供了语言之间的继承性。换句话说,CTS定义了可以在中间语言中使用的预定义数据类型,所有面向.NET Framework的语言都可以生产最终基于这些类型的编译代码。CTS不仅定义了基本数据类型,还定义了一个内容丰富的类型层次结构,在这些位置上,代码允许定义它自己的类型。CTS的层次结构反应了中间语言的单一继承的面向对象的方法。
CLS(公用语言规范,Common Language Specification)。.NET Framework将CLS定义为一组规则,所有.NET语言都应该遵循此规则才能创建与其他语言可互操作的应用程序,但要注意的是为了使各语言可以互操作,只能使用CLS所列出的功能对象,这些功能统称为与CLS兼容的功能。 例如:C#支持无符号数字类型,该特征能通过CTS的测试,但CLS却仅仅识别符号数字类型。因此,如果用户在一个组件中使用C#的无符号类型,就可能不能与不使用无符号类型的语言(如VB.NET)设计的.NET组件实现互操作。这里用的是“可能不”,而不是“不可能”,因为这一问题实际依赖于对non-CLS-compliant项的可见性。事实上,CLS规则只适用于或部分适用于那些与其他组件存在联系的组件中的类型。实际上,用户能够安全实现含私有组件的项目,而该组件使用了用户所选择使用的.NET语言的全部功能,且无需遵守CLS的规范。另一方面,如果用户需要.NET语言的互操作性,那么用户的组件中的公共项必须完全符合CLS规范。
2、什么是基元类型?
由编译器直接支持的类型称为基元类型。例如:C#中的int,string等等就是基元类型,实际运行过程中被映射为FCL中对应的类型(java中叫做包装类),如System.Int32,System.String。
3、值类型和引用类型的区别是什么?为什么要设计值类型?值类型会被GC回收吗?值类型是否能在托管堆分配?
(1)如果一个变量是使用基本的内置数据类型之一或用户定义的结构进行声明的,则该变量是值类型(但string类型除外,它是引用类型)。值类型的内容存储在堆栈上分配的内存中。
引用类型的变量又称为对象,可存储对实际数据的引用。
使用栈效率较高,但值类型的生命周期有限,不适合在不同类之间共享数据。相反,引用类型(例如,类或数组的实例)在另一个被称为“堆”的内存区域中分配,仅当c#的垃圾回收系统确定不再需要该引用类型变量内存时,才进行回收。声明引用类型需要更多系统开销,但它们的优点是可以从其他类进行访问。
(2)、设计值类型为了效率高,快速分配空间。
(3)、值类型不会被GC回收,因为它在栈上(GC只回收托管堆上的内容)。
(4)、值类型不可以在托管堆分配,除非它装箱。
4、Equals、==、ReferenceEquals如何区别使用?
(1)Equals确定指定的实例是否被视为相等,但是如果为空就不能被调用,常被重写(override),如:
- int i1 = 10;
- int i2 = 10;
- Console.WriteLine(i1.Equals(i2));
返回的结果为True,
- string s1 = null;
- string s2 = null;
- Console.WriteLine(s1.Equals(s2));
运行时会出现错误,
- string s3 = "A";
- string s4 = "A";
- Console.WriteLine(s3.Equals(s4));
返回的结果为True,
- //MyClass为自定义类
- MyClass c1 = new MyClass();
- MyClass c2 = new MyClass();
- Console.WriteLine(c1.Equals(c2));
返回的结果为False。
(2)对于预定义的值类型,如果操作数的值相等,则相等运算符(==)返回True,否则返回False。对于string以外的引用类型,如果两个操作数引用同一个对象,则==返回True,否则返回False。对于string类型,==比较字符串的值。如:
- int i1 = 10;
- int i2 = 10;
- Console.WriteLine(i1 == i2);
返回的结果为True,
- string s1 = null;
- string s2 = null;
- Console.WriteLine(s1 == s2);
返回的结果为True,
- string s3 = "A";
- string s4 = "A";
- Console.WriteLine(s3 == s4);
返回的结果为True,
- C c1 = new C();
- C c2 = new C();
- Console.WriteLine(c1 == c2);
返回的结果为False。
(3)ReferenceEquals确定指定的Object实例是否是相同的实例,不会被重写,基础类型值相等时返回False,如:
- int i1 = 10;
- int i2 = 10;
- Console.WriteLine(ReferenceEquals(i1, i2));
返回结果为False,
- string s1 = null;
- string s2 = null;
- Console.WriteLine(ReferenceEquals(s1, s2));
返回结果为True,
- string s3 = "A";
- string s4 = "A";
- Console.WriteLine(ReferenceEquals(s3, s4));
返回结果为True,
- //MyClass为自定义类型
- MyClass c1 = new MyClass();
- MyClass c2 = new MyClass();
- Console.WriteLine(ReferenceEquals(c1, c2));
返回结果为False。
5、什么是虚方法?如何理解多态?
(1)虚方法就是用virtual修饰的方法。调用虚方法时,将为重写成员检查该对象的运行时类型,将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。它是实现多态的途径之一。
(2)通过多态,实现了对象的多样性,并且实现迟绑定,提高程序的灵活性。
6、overload和override有什么区别?
(1)Overload:c#没有该关键字,理解为重载,属于运行前、编译时的一种技术,是继承的范畴。
(2)Override:是运行时技术,用它实现多态。
7、基于接口编程的目的是什么?什么情况下使用接口,什么情况下使用抽象类?
(1)基于接口编程的目的是为了提高程序的灵活性。
(2)当一个类准备要继承多个类的时候,必须使用接口(因为类只能继承一个类,却可以继承多个接口);当一个方法需要被继承且有方法必须要被定义时,要使用抽象类。
8、委托是什么意思?什么叫委托链?我们能在代码中继承MulticastDelegate吗?
(1)委托是通过对方法名的调用来调用方法的一种对象,委托类似于C++函数指针,但它们是类型安全的。委托允许将方法作为参数进行传递,委托可用于定义回调方法。
(2)将多个委托链接在一起,供对象使用,构成委托链。
(3)MulticastDelegate是一个特殊类,编译器和其他工具可以从此类派生,但是不能显式地从此类进行派生。
9、实现Iterators一般用到哪些接口?
IEnumerable,IEnumerator
10、简要谈一下您对微软.NET架构下Remoting和WebService两项技术的理解以及实际中的应用。
(1)Remoting是.NET中服务端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置,跨越Machine,Process,AppDomain进行方法调用的技术。对于三层结构的程序,就可以使用Remoting技术来构建。它是分布应用的基础技术,相当于以前的DCOM,Remoting可以利用TCP/IP、二进制传送提高效率。
(2)Web Service是一种构建应用程序的普通模型,并能在所有支持Internet网通讯的操作系统上实施。Web Service令基于组件的开发和Web的结合达到最佳,是基于组件的对象模型。Web Service主要利用HTTP协议传输数据,可穿透防火墙。
转载于:https://blog.51cto.com/fuyang/480756
.NET基础知识(一)相关推荐
- 嵌入式Linux的OTA更新,基础知识和实现
嵌入式Linux的OTA更新,基础知识和实现 OTA updates for Embedded Linux, Fundamentals and implementation 更新的需要 一旦嵌入式Li ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
- 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...
注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...
- 《计算机网络应用基础》模拟试卷(六),《计算机与网络应用基础知识1》模拟试卷...
<计算机与网络应用基础知识1>模拟试卷 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 <计算机与网络应用基础知识1& ...
- python向量计算库教程_NumPy库入门教程:基础知识总结
原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...
- python常用变量名_python基础知识整理
Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...
- 计算机基础知识掌握欠缺,《计算机基础知识》实验教学改革探讨.pdf
<计算机基础知识>实验教学改革探讨.pdf Science& TechnologyVision 科 技 视 界 科技 探·索·争鸣 计<算机基础知识>实验教学改革探讨 ...
- python计算wav的语谱图_Python实现电脑录音(含音频基础知识讲解)
前言 今天开始进入近期系列文章的第一篇,如何用 Python 来实现录音功能. 在开始"造轮子"之前,个人一直强调一个观点,如果有些东西已经有了,不妨直接去 github 上搜,用 ...
- 计算机wrod初级考试题及答案,计算机基础知识+Word基础知识+Excel基础知识试题答案解析.doc...
文档介绍: 计算机基础知识+ Word基础知识+ Excel基础知识 第一部分 一.单项选择题 1.世界上第一台电子数字计算机取名为( ). A.UNIVAC B.EDSAC C.E ...
- java 前端基础知识_【计算机·知识】关于前端的计算机基础知识
原标题:[计算机·知识]关于前端的计算机基础知识 作为一个刚刚入门的程序猿,你是否对专业知识有足够的了解?今天新闻君带你走进前端的世界. 前端的语言接触起来相对于后端的语言要容易不少,但前端的语言也有 ...
最新文章
- matlab如何加随机噪声
- IntelliJ IDEA 常用设置
- windows系统下的python环境的搭建
- JavaScript实现计算π值算法(附完整源码)
- 2018年1月 常用的linux命令
- 设计模式之单例模式(一)
- 遗传算法解决TSP问题MATLAB实现(详细)
- Blur Multiple Images(图片模糊化处理软件)官方正式版V1.8 | 怎样将图片模糊化处理?
- 关于宋宝华linux驱动学习视频的读后感
- 计算机房的正常温度和湿度,什么是机房温度、湿度标准?
- java日志篇(2)-JUL(java.util.logging)
- 编程之美4.7蚂蚁爬杆扩展问题附猎人抓狐狸(必胜策略)
- 02-DDL 数据定义语言
- 数据分析的三大时间轴:过去、现在和未来(转发有福利哦)
- 爱情公寓不为人知的创作历程
- ES压测工具(四):esrally实例操作
- Ubuntu安装Google Chrome,报NSS version的错误
- 师夷之技以制夷 吾尝终日而思矣,不如须臾之所学也
- 答题软件对于私人来说安全吗?
- 获取抖音视频信息api