C#语言
class和struct的区别?
类是引用类型,结构是值类型。
类可以继承,也可以实现接口;结构不能继承,但可以实现接口。
类可以有显式声明的无参数构造函数;结构不能包含显式的无参数构造函数。
结构中不能有实例字段初始值设定,但类没有任何限制。
类的构造函数里面可以不用对所有字段进行初始化;结构的构造函数里面必须对所有字段进行初始化。
类可以有析构函数,但结构不行。
C#中类成员的访问修饰符有哪些?
public:公有的,任何位置都可以访问。
private:私有的,只有类的自身才能访问。
protected:受保护的,只有类的自身及其派生类才能访问。
internal:内部的,同一个程序集里面的任何位置都能访问。
protected internal :内部受保护的,同一个程序集里面的任何位置,或者不同程序集中的派生类可以访问。
备注:
父类=基类
子类=派生类
面向对象的三大特征是什么?/面向过程和面向对象的区别
封装、继承、多态
抽象类和接口的区别?
相同点:
不能被直接实例化。
可以包含任意个抽象成员。
不同点:
抽象类也是类,具有类的共同特点:单基类继承,多接口实现;接口不是类,只能继承多个接口。
抽象类中可以包含已经实现的非抽象成员;接口中所有的成员都是抽象的、没有实现的。
接口可以包含哪些成员?
方法、属性、事件、索引器
什么是装箱和拆箱?
装箱:将值类型转换为 object 类型或由此值类型实现的任何接口类型。
拆箱:将object类型或接口类型转换为实际的值类型。
C#中,哪些类型是值类型?哪些类型是引用类型?
值类型:结构、枚举。
引用类型:类、接口、委托、数组、字符串。
值类型和引用类型的区别?
一般情况下,值类型的数据存储在栈上,引用类型的数据存储在堆上。
值类型的变量,变量本身存储的就是实际的数据;引用类型的变量,变量本身存储的仅仅是实际数据的引用地址,而实际的数据存储在托管堆上。
在作为方法的参数进行传递时,值类型参数传递的是值的副本,在方法中对该值进行修改不会影响原始值;引用类型参数传递的是参数的引用地址,在方法中对该参数进行修改会对托管堆上该地址的实际数据进行修改,从而会影响原始值。
C#中的基本数据类型有哪些?
值类型:
有符号整数(由小到大):sbyte、short、int、long
无符号整数(由小到大):byte、ushort、uint、ulong
浮点型:float、double、decimal
布尔型:bool
字符型:char
引用类型:
string、object
重写和重载的区别?方法的override和overload有什么区别?
重写(override):子类对基类中的虚成员(虚方法、虚属性等)或抽象成员(抽象方法、抽象属性等)进行覆盖,重新实现。
重载(overload):同一个类中,同名的方法具有不同的参数签名的实现。重载的必要条件是方法具有不同的参数签名。
方法的参数签名是指方法的参数个数、参数的数据类型、参数是否有ref、out、params修饰(方法的返回值类型不属于方法的参数签名)。
构造函数是否可以被继承?是否可以被重写?
不能被继承,也不能被重写,但是在创建类的实例时会首先调用其基类的无参数构造函数。
C#中,运算符“?”和“??”的区别是什么?
?是和:结合在一起使用的,?:称为条件运算符(或三目运算符),该运算符根据布尔型表达式的值返回两个值之一。条件运算符的格式如下:
condition ? first_expression : second_expression;
如果条件condition为 true,则计算第一表达式first_expression并以它的计算结果为准;如果为 false,则计算第二表达式second_expression并以它的计算结果为准。只会计算两个表达式其中的一个。
?? 运算符称为 null 合并运算符,用于定义可以为 null 值的类型和引用类型的默认值。如果此运算符的左边不为 null,则此运算符将返回左边的值;如果此运算符的左边为null,则返回右边的值。
C#中,用const和readonly修饰的字段有什么区别?
const:表示常量,其修饰的值是在编译期间确定的,因此在声明时只能通过常量表达式指定其值。
readonly:表示只读字段,其修饰的字段的值是在运行时计算的,在对象的实例构造函数或类的静态构造函数首次被调用时计算,之后字段的值便不能被更改。
string s = ”” 和string s = null的区别?string s,string s=””,string s=null,string s=string.Empty.
string s = “” :字符串变量s指向了空字符串,表示给变量s分配了内存空间,只不过s指向了一个长度为零的空字符串对象。
string s = null :字符串变量s指向了空引用null,表示s没有引用任何对象,即没有给变量s分配内存空间。
C#中,new有几种用法?
用于创建对象和调用构造函数。
用于创建匿名类型的实例。
在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。
C#中,ref和out在修饰方法参数时有什么区别?
ref和out都可以实现将一个指定的参数按照引用进行传递:
ref参数在传入方法之前必须进行初始化;而out参数在传入方法之前可以不用初始化。
ref参数在方法内部可以直接使用;而out参数在方法内部