.NET基础面试题一

2023-12-16 20:13:09
1.C#中堆和栈的区别?
堆(Heap)和栈(Stack)是C#中两种分配内存的不同方式
栈(Stack):是一种先进后出的内存分配方式。它用于存储基本数据类型和对象引用,它是一种连续的内存空间,存储在cpu的寄存器上,它的大小在编译的时就是已知的,因此分配内存就是分配固定的大小空间。栈的分配和释放都是系统自动的,方法调用时在栈中分配一块内存空间,方法结束会自动释放,所以它的分配和释放速度特别快。
堆(Heap):是一种后进先出的内存分配方式。它用于存储对象和动态分配内存,它是一种非连续的内存空间,存储在程序地址空间的堆区。它的大小在编译的时候是未知的,因此它的分配是根据实际所需的进行分配空间。堆是由程序员手动申请,如果申请的是托管堆,那么这个回收释放是有垃圾回收器(GC)回收释放的,当对象不在被程序引用的时候,就会被垃圾回收器(GC)自动回收,如果是申请的是非托管堆,那么这个就需要程序员手动释放回收。因此它的释放速度相对较慢。
2.C#中的委托是什么?事件是不是一种委托?
委托(Delegate)是一种类似C/C++的函数指针,可以把它看作为是一种安全的函数指针。委托是一种引用类型变量,它存储了对某个方法的引用,但这个引用可以在运行时改变,它本质上还是一个类,是定义了方法的类,它可以将方法作为参数传给另外一个方法。
事件是基于委托的,它是一种特殊的委托,事件通常用于类之间的通信,其中一个类发布一个事件,而其他类可以订阅这个事件。当你触发事件时,所有订阅该事件的方法都会被调用。
3.C#静态构造函数特点是什么?
静态构造函数是一个特殊的构造函数,它不能被继承,没有参数,不能被调用。静态构造函数只在类被加载到内存中时执行一次。如果类中包含 Main() 方法,那么该类的静态构造函数会在 Main() 方法执行之前被调用。
执行顺序:静态变量>静态构造函数>实例变量>实例构造函数
4.分别解释一下CTS、CLS、CLR的含义
CTS(Common Type System):通用类型系统。每种语言都定义了自己的类型,.NET通过CTS提供了公共的类型,然后翻译生成对应的.NET类型。
CLS(Common Language Specification):通用语言规范。它是一种规范,用于定义编程语言的基本语法和语义,以便不同的编程语言之间可以互相通信和交互。不同语言语法的不同,.NET通过CLS提供了公共的语法,然后不同语言翻译生成对应的.NET语法。例如,C#、Visual Basic、C++等语言都遵循了CLS规范。
CLR(Common Language Runtime):公共语言运行时。它是一种运行时环境,用于执行遵循CLS规范的编程语言的程序。CLR是.NET Framework的核心组件之一,它提供了内存管理、垃圾回收、类型安全和安全性等功能。CLR支持多种编程语言,包括C#、Visual Basic、C++等。有不同的CLR,比如服务器 CLR、Linux CLR(Mono)、Silverlight CLR(CoreCLR)。相当于一个发动机,负责执行IL。
5.C#中什么是值类型与引用类型?
值类型(Value Types):是一种简单的数据类型,通常存储的是它本身,值类型包含基本数据类型(整数类型,浮点数类型,字符类型,波尔类型)、枚举、结构体、以及元组(C#7.0版本开始引入的),它是通常分配在栈中,因此它访问的速度特别快。
引用类型(Reference Types):是一种复杂的数据类型,它存储的是对象引用地址,而不是对象本身,引用类型包含类、接口、数组、委托等,它通常分配在堆中,因此它可以动态分配内存和释放。

文章来源:https://blog.csdn.net/u010784529/article/details/135023209
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。