C#编程语言中堆与栈、委托与事件、静态构造函数等核心概念详解
1。C#中的堆和堆栈有什么区别?

2. C#中的委托是什么?事件是一种委派吗?
3. c#静态构造函数的特征是什么?
4。分别对CT,CLS和CLR的解释是什么? 5。c#中的值类型和参考类型是什么?
6。请详细说明C#中的类和结构之间的相似性和差异?
7。新关键字的作用
8。int有什么区别?
9。在C#中传递的中值和参考文献中的参考文献之间有什么区别?
10。在C#中传递REF和OUT参数之间有什么区别?
11. C#中的包装和拆箱是什么?
12.在实施多态性的过程中,超载过载和重写重写有什么区别?
13。静态关键字在C#中的作用是什么?
14。在C#成员变量和成员函数之前添加静态的效果是什么?
15。是否只能根据数字索引索引器实施过程,请描述
16。c#中的抽象类和接口之间有什么区别?
17。在C#中密封的类别修饰的类的特征是什么?
18。字符串str = null和字符串str =“”和字符串str = string。字符串中的差异
19. byte b ='a';字节C = 1;字节d ='ab';字节e ='ah';字节G = 256;这些变量的某些错误是什么错误?
20。字符串和字符串布尔器之间的差异,两者的性能的比较
21.什么是扩展方法?
22。特征是什么?如何使用它?
23。什么是应用程序域(AppDomain)
24。字节a = 255; a+= 5; a的值是多少?
25。const和Readonly有什么区别?
26。分析以下代码,A和B的值是多少?
27.Strings = new String(“ XYZ”);创建了多少个字符串对象?
28.C#可以直接在内存上运行
29。什么是强类型,什么是弱类型?哪一个更好?为什么?
30。什么是数学。 MATH.ROUND(-11.5)等于多少?
31。&&&之间的区别
32。i ++和++ i之间有什么区别?
33。AS和IS之间的区别
34。谈论最终和最后之间的区别。
35。简要描述C#成员修饰符
36。什么是匿名类别,有什么好处?
37。告诉我什么是逐字字符串
38。列出您知道的数字格式转换
39。谈论字符串剪接和字符串插值
40.什么是虚拟函数?什么是抽象功能?
41.什么是网络服务?
42. ado.net的常用对象是什么?
43。在ASP.NET中,所有自定义用户控件都必须继承?
44。在.NET托管代码中,我们不必担心内存泄漏,因为它有吗?
45.什么是MVC模式
46。遍历带有foreach的访问对象的要求
47.什么是反射?
48。懒惰加载与ORM中的直接加载之间有什么相似之处和差异?
49。简要描述弹性和动作之间的区别?
50.23的设计模式的名称是什么?如何对它们进行分类?
1。C#中的堆和堆栈有什么区别?
堆栈:由编译器自动分配和释放。功能体中定义的变量通常在堆栈上。堆:通常由程序员分发和发布。通过使用新的Malloc等分配内存功能获得的内容在堆上获得的内容。将其存储在堆栈中时,必须通过存储顺序对其进行管理,并维护第一和淘汰的原则。它是一个连续的内存域,由系统自动分配和维护。堆:它是无序的,它是一个不连续的内存域,它具有用户控制并自己释放。如果用户自己不释放它,则当内存达到特定值时,它将通过垃圾收集器(GC)进行回收。堆栈内存不需要由我们管理,也不由GC管理。当使用堆栈的顶部元素时,它将立即将其发布。堆需要GC清洁。使用参考类型时,通常是指针的操作,而不是参考类型对象本身。但是价值类型自行运行
2. C#中的委托是什么?事件是一种委派吗?
委派的本质是一类,委托是将一种方法代替另一种方法。事件是代表的实例,事件是一个特殊的代表。 //例如:OnClick事件中的参数是一种方法。
3. c#静态构造函数的特征是什么?
第一个要执行的构造函数,并且在类中只允许一个没有参数的静态构造函数来执行执行顺序:静态变量>静态构造函数>静态构造函数>实例变量>实例构造函数
4。分别对CT,CLS和CLR的解释是什么
CTS:通用语言系统。 CLS:通用语言规范。 CLR:通用语言运行时库。 CTS:通用类型系统通用类型系统。 int32,int16→int,字符串→字符串,布尔值→布尔。每种语言都定义了自己的类型,.NET通过CTS提供公共类型,然后翻译以生成相应的.NET类型。 CLS:通用语言规范通用语言规范。不同语言的不同语法。每种语言都有自己的语法。 .NET通过CLS提供公共语法,然后将不同的语言转换为生成相应的.NET语法。 CLR:通用语言运行时通用语言运行时是GC,JIT等。有不同的CLR,例如服务器CLR,Linux CLR(Mono),Silverlight CLR(CORECLR)。它等同于负责执行IL的引擎。
5. C#中的值类型和参考类型是什么?
值类型:结构,枚举,int,float,char,bool,小数参考类型:类,委托,接口,数组,对象,字符串
6。请详细说明C#中的类和结构之间的相似性和差异?
可以实例化类,属于参考类型。类可以实现接口和单个继承其他类。它也可以用作基本类型。在内存堆上分配的结构属于值类型,不能用作基本类型。但是,它可以实现接口。分配在内存的堆栈中。
7。新关键字的作用
操作员:创建一个对象实例
修饰符:在派生类中定义具有重复名称的方法,隐藏了基类
方法约束:通用约束定义,对可以使用的通用类型的约束
8。int有什么区别?
int?这是一个可随机的类型,默认值可以为null,int的默认值为0,int?通过int拳击将其作为参考类型实现。
9。在C#中传递的中值和参考文献中的参考文献之间有什么区别?
传递该值时,系统首先为所谓方法的形式参数分配内存空间,并根据位置将实际参数的值复制为正式参数。之后,该方法中正式参数的任何更改都不会影响相应的实际参数。
传递引用时,系统不会复制真实参数本身的值,而是将其传递给正式参数,而是将其参考值(即地址值)传递给正式参数。因此,正式参数引用的地址的变量是从传递的实际参数转移的。该方法正文中相应形式参数的任何更改都会影响传递的实际参数作为参考。
简而言之,通过值传递不是一个值类型的值参数,而是意味着正式参数变量将复制真实参数变量,即在堆栈上创建一个更相同的变量。并且通过参考将不会。参考和OUT可用于确定参数是否通过参考传递。
10。在C#中传递REF和OUT参数之间有什么区别?
(1)REF指定的参数必须在调用该函数时首先初始化,并且OUT不使用它
(2)输入功能时,OUT指定的参数将清除自身,因此必须在功能内执行初始化分配操作,而REF不需要
摘要:REF可以将值传递给方法或方法之外; OUT只能将值传递给外部方法:字符串是一种特殊的参考类型,其操作与值类型一致。如果要使用它,则在传递该方法中的正式参数后,则需要添加参考或输出关键字。
11. C#中的包装和拆箱是什么?
框:将值类型转换为参考类型卸载:将参考类型转换为值类型框:将堆中的对象实例分配到值类型,然后将值复制到新对象。
(1)步骤1:新分配的托管堆内存(大小是值类型实例大小以及方法表指针。
(2)步骤2:将值类型的实例字段复制到新分配的内存中。
(3)步骤3:返回托管堆中新分配的对象的地址。此地址是对对象的引用。
拆箱:检查对象实例以确保它是给定值类型的盒装值。将值从实例复制到值类型变量中。包装时无需显式类型的转换,但是拆箱需要明确的类型转换。 int i = 0; system.Object obj = i; //这个过程正在包装!只是拳击! int j =(int)obj; //此过程obj拆箱!
12.在实施多态性的过程中,超载过载和重写重写有什么区别?
覆盖重写和超负荷之间的差异。超载意味着该方法具有相同的名称。不同的参数或参数类型,执行多个超载以满足不同的需求覆盖是在基类中重写功能。实施多态性。过载:该方法具有相同的名称,参数或参数类型不同;超载是一个面向过程的概念。重写:这是在基类中重写虚拟方法。重写是一个面向对象的概念。
13。静态关键字在C#中的作用是什么?
对类有意义的字段和方法用静态关键字(称为静态成员)修改,并由类名称和访问操作员访问“。”。对于类实例有意义的字段和方法不会添加静态关键字,称为非静态成员或实例成员。注意:内存中只有一个静态字段的副本,而一个非静态字段在每个实例对象中都有一个副本。该方法是否是静态的,内存中只有一个副本。差异仅通过类名或实例名称访问。
14。在C#成员变量和成员函数之前添加静态的效果是什么?
它们称为常数成员变量和常数成员函数,也称为类成员变量和类成员函数。用于分别反映班级的状态。例如,类成员变量可用于计算类实例的数量,并且类成员功能负责此统计操作。没有新的
15。是否只能根据数字索引索引器实施过程,请描述
C#可以通过提供索引器来处理诸如数组之类的对象。特别是,属性,每个元素都以get或set方法暴露。索引器不仅可以索引号(数组下标),还可以索引一些哈希图字符串。因此,一般而言,通常只有一个c#中的一个索引器,这就是这样,但是只要您的级别,也可能有无数的索引。如果参数列表不同,则索引器与返回值无关。索引器的最大优势是使代码看起来更自然,并且与实际思维模式更加一致。 Microsoft的官方示例:索引器允许以与数组相同的方式将类或结构的实例索引。索引器类似于属性,除了其登录器采用参数。在下面的示例中,定义了通用类(类SampleCollection)并提供简单的获取和设置访问者方法(作为分配和检索值的一种方式)。程序类创建了此类用于存储字符串的实例。
16。c#中的抽象类和接口之间有什么区别?
摘要类摘要声明摘要类摘要方法。如果类中有抽象方法,则该类是一个抽象类。所谓的抽象方法意味着它不包含主题(不提供实现方法),并且必须由继承者重写。因此,不能实例化抽象类,只能通过继承子类重写。
接口声明接口,仅提供一些方法法规,并且在C#8之前不提供任何实现。它还可以支持C#9版本中的接口的实现;它不能用公共,摘要等修改,没有字段,常数,没有施工功能
两者之间的区别:
1。接口中不能有字段,但是抽象类可以拥有它们。 2。在接口中不能有诸如公共之类的修饰符,但是抽象类可以拥有它们。 3。接口可以实现多个继承。
17。在C#中密封的类别修饰的类的特征是什么?
密封,不能继承。
18。字符串str = null和字符串str =“”和stringstr = string.String中的差异
string.empty等同于“”,空是一个静态读取字段。字符串str =“”,初始化对象并分配空字符串字符串String str = null的内存空间,初始化对象,并且不分配内存空间。
19. byte b ='a';字节C = 1;字节d ='ab';字节e ='ah';字节G = 256;这些变量的某些错误是什么错误?
这个问题测试了数据类型可以携带的数据大小。 1个字节= 8位,1个汉字= 2字节,1英语= 1个字节= 8bit,因此BC是对的,DEG是错误的。 'a'是char类型,错误Java字节值范围为-128〜127,而C#中的A字节为0〜255
20。字符串和字符串布尔器之间的差异,两者的性能的比较
所有都是参考类型。 StringBuilder的默认容量在堆上为16,可以允许其封装的字符串中的字符数。每个StringBuffer对象具有一定的缓冲能力。当字符串尺寸不超过容量时,新容量将不会分配,并且弦乐大小超过容量时,容量将自动增加。对于简单的字符串串联操作,StringBuilder可能并不总是比stription的字符串更好。因为创建StringBulider对象也会消耗大量性能。在较少的字符串串联的情况下,过度滥用弦乐器将导致浪费性能而不是节省,仅当无法预测的大量字符串操作时,仅考虑使用StringBuilder的使用。从最终分析中,我们可以看到,如果它相对较少,则根本没有很大的区别。使用StringBulider时,最好设置适当的容量值,否则由于默认值的容量不足,内存将经常划分。
21.什么是扩展方法?
在一个单词中,扩展方法允许您在不修改类型条件的情况下“添加”方法:根据扩展方法必须满足的条件,1。静态类中的静态方法必须为2。第一个参数是扩展类型,您需要添加此关键字以将其识别为扩展方法建议:通常,仅在需要时实现扩展方法,并且要谨慎实施:您不能称呼它:通过类名称,并直接使用类型与类型调用。
22。特征是什么?如何使用它?
功能和属性是两个完全不同的概念,但在名称方面相似。属性功能是与目标对象关联的配置信息。从本质上讲,它是为目标元素提供相关的其他信息的类。此附加信息存储在DLL的元数据中,并且本身没有意义。在运行期间,通过反射获得其他信息
23。什么是应用程序域(AppDomain)
通过通用语言运行时在同一应用程序范围内创建的对象构建的边界(即,从应用程序入口点开始,沿激活的对象的顺序到任何地方)。应用程序域帮助隔离一个应用程序中创建的对象与在其他应用程序中创建的对象中创建的对象,从而可以预测运行时行为。单个过程中可以存在多个应用程序域。应用域可以理解为轻量级过程。扮演安全的角色。小型资源占用。
24。字节a = 255; a+= 5; a的值是多少?
字节的值范围从-2到8个功率到2-1,-256至258。当A+= 1时,A的值为0,因此当A+= 5时,值为4
25。const和Readonly有什么区别?
所有人都可以识别一个常数。主要存在以下差异:
1。初始化位置不同。必须在声明的同时分配const;可以在声明中分配ReadOnly;
2。修改的不同对象。 const可以修改类或局部变量的字段; ReadOnly只能修改3类的字段。const是一个编译时常数,它决定了编译时的值; ReadOnly是一个运行时常数,它决定运行时的值。
4。默认情况下const是静态的;如果将RealOnly设置为静态,则需要显示声明
5。修改参考类型时,const只能用null值修改字符串或其他参考类型;可以读取可以是任何类型。
26。分析以下代码,A和B的值是多少?
string strTmp = "a1某某某";
int a = System.Text.Encoding.Default.GetBytes(strTmp).Length;
int b = strTmp.Length;
分析:一个字母和数字为一个字节,一个中文帐户为两个字节,因此a = 8,b = 5
27.String s =新字符串(“ xyz”);创建了多少个字符串对象?
有两个对象,一个是“ xyz”,另一个是指向“ xyz”的参考对象。
28.C#可以直接在内存上运行
C#可以使用指针在不安全模式下在内存上操作,但是指针不能在托管模式下使用。 C#NET默认情况下不用指针运行。您需要设置它,右键单击项目 - >属性 - >选择生成 - >“允许不安全的代码” tick->保存
29。什么是强类型,什么是弱类型?哪一个更好?为什么?
强大的类型确定编译时的数据类型。在执行过程中不能更改类型,而弱类型在执行时确定类型。无论是否好,两者都有自己的利益,并且非常安全,因为它已提前确定并且是有效的。通常用于编译的编程语言,例如C ++,Java,C#,Pascal等。与比较相比,弱类型不是安全的,并且在运行时容易出现错误,但是它们是灵活的,并且主要用于解释的编程语言,例如JavaScript,等等
30。什么是数学。 MATH.ROUND(-11.5)等于多少?
Math.Round(11.5)= 12math.Round(-11.5)= -12
31。&&&之间的区别
相同的点和&&可以用作逻辑和运算符,代表逻辑和(and)。当操作员两侧的表达式结果为真时,结果为真。否则,只要一侧是错误的,结果就是错误。 (ps:使用逻辑且&&毫无意义,&不执行此操作。是错误的,第二个表达式将不再计算。对于上述表达式,当登录器为null时,将不会执行后续表达式,因此不会有NullPoInterException。如果将&&更改为&,将抛出NullPoInterException异常。 (ps:因此,当使用逻辑且&&毫无意义时)&被用作位操作。
摘要和有点操作,返回结果是int类型&&是逻辑操作,返回结果是bool类型
32。i ++和++ i之间有什么区别?
1.I ++是首先分配值,然后单独增加其; ++ i是单独增加它,然后分配值。
2.i = 0,i ++ = 0,++ i = 1; console.Writeline(++ i == i ++);结果是真的
33。AS和IS之间的区别
因为在转换时决定了兼容性。如果无法执行转换,请返回位null(没有生成新对象)。 AS转换是否成功的基础是,位null是否只是类型的兼容性判断,并且不执行实际类型。转换,返回true或fals,并且对象null也将返回false。效率比IS效率更高,因为只需要进行类型的兼容性检查
34。谈论最终和最后之间的区别。
最终:不能继承为父级。不能宣布最终的班级并宣布为抽象。最后:用于尝试{}捕获{}的{}结构,用于处理异常时,用于执行任何清除操作。
35。简要描述C#成员修饰符
摘要:表示未实现该方法或属性。
const:不能更改指定域或局部变量的值。