序言

Socket

为什么需要虚方法?

为了让子类重写

.Net(C#)对象判等

 

 

 

-------------------

什么是CLR

.NET面试题系列(一)汇总

  CLR常用简写词语,CLR是公共语言运行库(Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集等),并保证应用和底层操作系统之间必要的分离。CLR存在两种不同的翻译名称:公共语言运行库和公共语言运行时。

  CLR是一个可由多种编程语言使用的运行环境。CLR的核心功能包括:内存管理、程序集加载、安全性、异常处理和线程同步,可由面向CLR的所有语言使用。并保证应用和底层操作系统之间必要的分离。CLR是.NET Framework的主要执行引擎。

  为了提高平台的可靠性,以及为了达到面向事务的电子商务应用所要求的稳定性级别,CLR还要负责其他一些任务,比如监视程序的运行。按照.net的说法,在CLR监视之下运行的程序属于“托管的”(managed)代码,而不在CLR之下、直接在裸机上运行的应用或者组件属于“非托管的”(unmanaged)的代码。其中C#是托管代码,C++是非托管代码。

什么是CLI?

  通用语言基础结构(Common Language Infrastructure,CLI)是CLR的一个子集,也就是.NET中最终对编译成MSIL代码的应用程序的运行环境进行管理的那一部分。在 CLR结构图中CLI位于下半部分,主要包括类加载器(Class Loader)、实时编译器(IL To Native Compilers)和一个运行时环境的垃圾收集器(GarbageCollector)。CLI是.Net和CLR的灵魂,CLI为IL代码提供运行的环境,你可以将使用任何语言编写的代码通过其特定的编译器转换为 MSIL代码之后运行其上,甚至还可以自己写MSIL代码在CLI上面运行。

 IL是什么

   Intermediate Language (IL)微软中间语言。

  C#源代码通过LC转为IL代码,IL主要包含一些元数据和中间语言指令;

  JIT编译器把IL代码转为机器识别的机器代码。如下图

.NET面试题系列(一)汇总

  语言编译器:无论是VB code还是C# code都会被Language Compiler转换为MSIL

  MSIL的作用:MSIL包含一些元数据和中间语言指令

  JIT编译器的作用:根据系统环境将MSIL中间语言指令转换为机器码

JIT是什么,它是如何工作的?

  JIT(Just In Time简称JIT)是.Net边运行边编译的一种机制。

工作方式:

  开发人员需要通过IL与CLR进行交流, 虽然IL本身支持一些面向对象的概念, 但是对于开发人员来讲还是过于复杂低效, 于是C#应运而生, 程序员只需编写C#代码, csc编译器会将其翻译成IL;虽然CLR理解IL, 但是CPU只认识二进制指令,

  所以CLR需要JIT的帮助, 将IL翻译成CPU指令. JIT按需工作, 当一个.NET方法即将被执行时,JIT会介入, 把该方法(IL指令) 编译成CPU指令, 并保存以供重用.

堆栈数据结构的区别:

  堆(数据结构):堆可以看做是一棵树;例如:堆排序;

  栈(数据结构):一种先进后出的数据结构

堆栈空间分配:

  栈(操作系统):由操作系统自动分配释放,存放函数的变量值,局部变量的值等等,其操作方式类似于数据结构中的栈;

  堆(操作系统):一般由开发者分配释放,若不释放,程序结束时可能会有OS回收,分配方式倒是类似于链表;

  栈是自行维护的,也就是说内存自动维护栈,当栈顶的盒子不再被使用,它将被抛出。相反的,堆需要考虑垃圾回收,垃圾回收用于保持堆的整洁性。

值类型和引用类型

  值类型:bool,byte ,char,decimal,double,enum,float,int,long,sbyte,short,struct,uint,ulong,ushort

  引用类型:各种class类、string、数组、接口、委托、object

.NET面试题系列(一)汇总

装箱和拆箱

  装箱:将值类型→引用类型

  拆箱:将引用类型→值类型

.NET面试题系列(一)汇总

 装箱操作和拆箱操作是要额外耗费cpu和内存资源的,所以在c# 2.0之后引入了泛型来减少装箱操作和拆箱操作消耗。

泛型

  泛型出现的一个很重要的原因,就是需要创建能够容纳任何类型的容器类的需求。之前用的是object来存储。但是这样会导致可以存多种类型,我们确实需要容器能够支持不同类型,但是具体存储的时候,我们希望只能存储一种,以防止错误发生,然而object会接受任何类型,这就导致泛型的出现 泛型的本质就是暂时不指定类型,稍后制定类型,一旦指定,就必须存储这一种类型的对象了 。

.NET面试题系列(一)汇总
/// <summary>
    /// 泛型方法
    /// </summary>
    public class GenericsMethord
    {
        //这里介绍泛型方法,在之前02-泛型的引入中,使用的就是泛型方法,这里再重复一次
        /*
        详解:T为泛型的一个代表,换成别的字母同样可以
              T和A代表的类型在使用时才声明,俗称“延迟声明”
        */
        public static void ShowModel<T, A>(T model1, A model2)
            where T : ModelFather
            where A : model3
        {
            Console.WriteLine("id值为:" + model1.id + "  name值为:" + model1.name);
            Console.WriteLine("id值为:" + model2.id + "  name值为:" + model2.name);
        }
    }
View Code

相关文章:

  • 2022-12-23
  • 2021-11-02
  • 2021-11-08
  • 2021-08-02
  • 2021-06-15
  • 2021-12-13
  • 2021-08-31
  • 2021-07-16
猜你喜欢
  • 2021-12-03
  • 2022-02-13
  • 2021-11-18
  • 2022-12-23
  • 2022-03-06
  • 2021-08-21
  • 2022-01-17
相关资源
相似解决方案