.net基础问题与答案二

1、Override和Overload

  重载应该叫overload,重写叫override;重载某个方法是在同一个类中发生的!重写是在子类中重写父类中的方法。

  1.override:   父类:public virtual string ToString(){return "a";}
                    子类:public override string ToString(){return "b";}
  2.overload:  同一类中或父子关系类中皆可.
                   public string ToString(){return "a";}
                   public string ToString(int id){return id.ToString();}
  重写(override)是用于重写基类的虚方法,这样在派生类中提供一个新的方法;

  重载(overload)是提供了一种机制, 相同函数名通过不同的返回值类型以及参数来表来区分的机制。

2、托管和非托管的区别

  托管代码就是Visual Basic .NET和C#编译器编译出来的代码。编译器把代码编译成中间语言(IL),而不是能直接在你的电脑上运行的机器码。中间语言被封装在一个叫程序集(assembly)的文件中,程序集中包含了描述你所创建的类,方法和属性(例如安全需求)的所有元数据。你可以拷贝这个程序集到另一台服务器上部署它。通常来说,这个拷贝的动作就是部署流程中唯一的一个操作。

  托管代码在公共语言运行库(CLR)中运行。这个运行库给你的运行代码提供各种各样的服务,通常来说,他会加载和验证程序集,以此来保证中间语言的正确性。当某些方法被调用的时候,运行库把具体的方法编译成适合本地计算机运行的机械码,然后会把编译好的机械码缓存起来,以备下次调用(这就是即时编译)。随着程序集的运行,运行库会持续地提供各种服务,例如安全,内存管理,线程管理等等。这个程序被“托管”在运行库中。Visual Basic .NET和C#只能产生托管代码。如果你用这类语言写程序,那么所产生的代码就是托管代码。如果你愿意,Visual C++ .NET可以生成托管代码。当你创建一个项目的时候,选择名字是以.Managed开头的项目类型。例如.Managed C++ application。

  非托管代码直接编译成目标计算机的机械码,这些代码只能运行在编译出它们的计算机上,或者是其它相同处理器或者几乎一样处理器的计算机上。非托管代码不能享受一些运行库所提供的服务,例如安全和内存管理等。如果非托管代码需要进行内存管理等服务,就必须显式地调用操作系统的接口,通常来说,它们会调用Windows SDK所提供的API来实现。就最近的情况来看,非托管程序会通过COM接口来获取操作系统服务。跟Visual Studio平台的其他编程语言不一样,Visual C++可以创建非托管程序。当你创建一个项目,并且选择名字以MFC,ATL或者Win32开头的项目类型,那么这个项目所产生的就是非托管程序。

  总而言之,非托管代码是运行在公共语言运行库环境(CLR)的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。

3、Equals和用“==”的区别

  因为值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。

  ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

  equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

  

4、拓展方法

  拓展方法允许改变类,但是不需要该类的源代码。

  拓展方法是静态方法,它是类的一部分,但实际上没有放在类的源代码中。

  假定 Money类需要一个方法 AddToAmount(decimal amountToAdd)。但是,由于某种原因,程序集最初的源代码不能直接修改。 此时必须做的所有工作就是创建一个静态类,把方法 AddToAmount添加为一个静态方法。 对应的代码如下 :

  注意AddToAmount()方法的参数,对于拓展方法,第一个参数是要拓展的类型,它放在this关键字的后面。这告诉编译器,这个方法是Money类的一部分。

5、webservice是什么?对其的了解?

  webservice 是微软针对面向服务(SOA)编程开发出来的一种技术,它使用了wsdl描述语言来声明一个可被引用到的服务的接口,使用SOAP简单对象访问协议来进行 俱体数据的传输,比如方法参数及返回值。SOAP中传输的对象都是被序列化后的XML格式的数据,是可以穿透防火墙,进行不同应用之间的对象传输。

6、UDP链接与TCP链接有什么异同?

  UDP协议不一定提供可靠的数据传输,也就是说该协议不能保证数据准确无误地到达目的地。但是,假如你的程序的目标是尽快地传输尽可能多的信息时可使用UDP来实现,比如QQ、YY语音等聊天程序。
  TCP/IP提供可靠的数据传输,并在相互进行通信的设备或服务之间保持一个虚拟连接。在数据包接收无序、丢失或在交付期间被破坏时,负责数据恢复。

7、C#中private、protected、public、internal修饰符的区别

  Private 私有访问,只限于本类成员访问,子类、实例都不能访问。

  Protected 保护访问,只限于本类和子类访问,实例不能访问。

  Public 公有访问,不受任何限制。

  Internal 内部访问,只限于本项目内访问,其他不能访问。

8、冒泡排序,快排等基础的数据结构

  1、冒泡排序基本思想:将n个记录看做纵向排列,每趟排序时按照自下而上对每对相邻记录进行比较,若次序不符合要求就交换。每趟排序结束时都能使排序范围内关键字最小的记录像气泡一样升到表上端的对应位置,整个排序过程共进行n-1趟,依次将关键字最小、次小、第三小…的各个记录“冒到”表的第一个、第二个、第三个… 位置上。

示例代码:

for (int i = 0; i < a.Length; i++ )

{

for(int j = a.Length-1;j>i;j--)

{

if(a[j] < a[j-1])

{

int temp = a[j];

a[j] = a[j - 1];

a[j - 1] = temp;

flag = 1;

}

}

}

  2、快速排序:快速排序的思想是分治思想。

  快速排序是找出一个元素作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的值都不小于基准值。

实例代码:

int quicksort(vector<int> &v, int left, int right){
        if(left < right){
                int key = v[left];
                int low = left;
                int high = right;
                while(low < high){
                        while(low < high && v[high] > key){
                                high--;
                        }
                        v[low] = v[high];
                        while(low < high && v[low] < key){
                                low++;
                        }
                        v[high] = v[low];
                }
                v[low] = key;
                quicksort(v,left,low-1);
                quicksort(v,low+1,right);
        }
      }

9、拆箱和装箱以及拆箱和装箱的性能损耗

  所谓的装箱是把值类型转化成引用类型,拆箱就是把引用类型转化成值类型。

  装箱过程中,值类型被复制并分配到托管堆,并把它转化成对应的引用类型,这个过程会造成性能的损失。

  在拆箱过程中,将托管堆中的引用类型复制到栈中,转换成对应的类型,这个过程中也会造成性能的损失。

时间: 2024-10-06 14:04:14

.net基础问题与答案二的相关文章

php面试题汇总二(基础篇附答案)

介绍一些php常见面试题及答案,都是平时面试的时候经常会遇到的,小伙伴们仔细了解下吧.接着上一篇php面试题汇总一(基础篇附答案) 1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中:而链接到当前页面的URL记录在预定义变量(2)中. 答:echo $_SERVER['PHP_SELF']; echo $_SERVER["HTTP_REFERER"]; 2:数组函数 arsort 的作用是(6):语句 error_reporting(2047)的作用是(7

基础JavaScript练习(二)总结

任务目的 学习与实践JavaScript的基本语法.语言特性 练习使用JavaScript实现简单的排序算法 任务描述 基于上一任务 限制输入的数字在10-100 队列元素数量最多限制为60个,当超过60个时,添加元素时alert出提示 队列展现方式变化如图,直接用高度表示数字大小 实现一个简单的排序功能,如冒泡排序(不限制具体算法),用可视化的方法表达出来,参考见下方参考资料 任务注意事项 实现简单功能的同时,请仔细学习JavaScript基本语法.事件.DOM相关的知识 请注意代码风格的整齐

windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)

windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) 简单说几句 在mongodb中3元素:db(数据库).collection(集合).document(文档) 其中collection类似于数据库中的表,document类似于行,这样一来我们就将内容对比起来记忆学习了. 数据格式 MongoDB documents是BSON格式(一种类json的一种二进制形式的存

注册页面基础判定制作法二

function valFrom(){ var userName=document.getElementById("userName"); var pwd=document.getElementById("pwd"); var repwd=document.getElementById("repwd"); var email=document.getElementById("email"); var age=document.

C#基础知识篇(二)-----------C#笔记

1.关系运算符(比较运算符) 1.关系运算符有哪些? >,< ==,!= >=,<= 2.关系运算符的作用? 用于比较两个事物之间的关系. 3.什么叫关系表达式? 由关系运算符连接起来的式子叫关系表达式. 注意:所有的关系表达式最终都能计算成一个bool类型的值. 2.逻辑运算符 1.逻辑表达式有哪些? 逻辑与:&& ,逻辑或:||  ,逻辑非:!(又叫取反) 2.逻辑运算 语法:表达式1 逻辑运算符  表达式2 逻辑运算符连接的两个表达式,要最终能求解成一个boo

js基础--javascript基础概念之语句(二)

js基础--javascript基础概念之语句(二)label,break,continue.. break .  continue 语句. break  continue 语句用于在循环中精确控制代码的执行,其中break语句会立即退出循环,执行循环后面的语句. continue 则退出循环后返回到再次进入循环中. 如: var num = 0; for(var i = 0; i<=100; i++){ if(i >= 10){ break; } num = i; } alert(num);

【0002(基础)】Skyline二次开发入门经典系列教程&mdash;&mdash;目录

这段时间由于个人事务太多,以至于没有按照时间更新系列教程,本人将尽快补上所欠章节,在此说声抱歉!   这一章在我心目中占有很重要的地位,因为我想通过这一章的内容来确定整个系列的大致走向.然而在整理的过程中,发现现实远比想象要复杂得多:首先想尽可能介绍较多的知识点,其次又要考虑学习的简易程度,再次又要确定顺当的知识体系流程-- 由于暂时的考虑无论如何也是不可能完备的,因此为了不影响后面教程的编写,暂定把这一章作为一个[流动性质]的可变章节,在编写每一章时,动态根据实际情况修改(添加.移动.修改)系

【0001(基础)】Skyline二次开发入门经典系列教程总览

本人是从2012年开始接触Skyline二次开发的,经历过 v6.0~v6.5(最新的6.6版本还未使用)的所有版本.作为一名非GIS专业毕业的大学本科生,鬼使神差般地进入了这个瑰丽的GIS领域.因此,在从事了4年多的Skyline二次开发工作后,我不能说我是"授业有专攻",更不能说我是"闻道有先后".在这个领域内,大牛之人比比皆是,正是因为他们的存在与指引,才使得我现在有点东西可以写出来供大家交流沟通.   整理这个系列教程的原因主要出于如下几点的考虑: 1.Sk

零基础JavaScript编码(二)

任务目的 在上一任务基础上继续JavaScript的体验 学习JavaScript中的if判断语法,for循环语法 学习JavaScript中的数组对象 学习如何读取.处理数据,并动态创建.修改DOM中的内容 任务描述 参考以下示例代码,页面加载后,将提供的空气质量数据数组,按照某种逻辑(比如空气质量大于60)进行过滤筛选,最后将符合条件的数据按照一定的格式要求显示在网页上 <!DOCTYPE html> <html> <head> <meta charset=&