1. 什么是类? 什么是结构体? 二者有什么区别? 相同点是什么? 你经常使用类还是结构体?为什么?
类:同一类对象共同属性和行为的抽象
结构体:同一类共同属性和行为的抽象
二者区别:类:引用类型 结构体:值类型
二者相同点:对共同属性和行为的抽象
2..怎样理解静态变量和静态方法? 静态构造函数的作用是什么?
静态变量:属于类,不属于对象
静态方法:不用创建类的实例,直接使用类的方法,方法变量在栈上,
静态构造函数的作用: 初始化类的静态数据成员,在代码加载时执行;
程序中无法调用静态构造函数,此前的任何修饰符都是无效的;
静态构造函数,没有参数
3.值类型与引用类型有什么区别?
值类型:数据存储在栈上,直接存储数据本身
引用类型:数据存储在堆上,在栈上引用其地址
二者区别:
l 所有内置对象,除了object和string 以外,都是值类型,所有用户定义类型,除了结构体都是引用类型;
l C#内置值类型(13种)
类型 | 大小(字节) | .net类型 | 说明 | |
byte | 1 | Byte | 无符号(0-255) | 八 种 整 型 |
sbyte | 1 | Sbyte | 有符号(-128~127) | |
short | 2 | Int16 | 有符号(short) (-32768~32767) | |
ushort | 2 | Unt16 | 无符号(short) (0~65535) | |
Int | 4 | Int32 | ||
Uint | 4 | Uint32 | ||
Long | 8 | Int64 | ||
Ulong | 8 | Uint64 | ||
Char | 2 | Char | Unicode 字符 | |
float | 4 | Single | 三 种 浮 点 型 | |
Double | 8 | Double | ||
Decimal | 8 | Decimal | ||
bool | 1 | Boolean | True or false |
l 除了基本类型,C#还有两种值类型:enum (枚举)和 struct(结构) ;
l 编译器会默认带小数点的数位double类型,要赋值给一个float型变量,需要在数字后面加上f;
l 常见转义字符 :
\’单引号 \”双引号 \\ 反斜杠 \0 空 \a 警铃 \b 回退 \f换页 \n 换行 \r 回车 \t 水平制表 \v 垂直制表
4.override 与重载有什么区别?
Override:覆盖:在继承关系中,父类中的虚方法,在子类中需要重写时
Overload:重载: 同一个类中,函数名相同,参数列表不同,实现不同功能
5.你在什么情况下会用到虚方法?它与接口有什么不同?
子类要重写父类中的方法时,父类中方法应声明为虚方法;
接口:只有方法声明,没有方法体,可以有属性和索引器(都是方法),有概念上的共同特征,要用接口实现,没有方法体
虚方法:不但有方法声明,还要有方法体
6.什么是抽象方法? 什么是抽象类?
抽象方法:只有方法签名,没有方法体
抽象类: 类前加关键字abstract,则为抽象类,抽象类不能创建对象
一个类中,如果有抽象方法,则该类一定位抽象类;但是抽象类中不一定有抽象方法
7. 怎样理解类、抽象类、和接口之间的异同?
抽象程度不同:
接口:最高程度抽象,忽略对象,只考察行为概念,不考虑行为的具体实现
类:对对象属性和行为的抽象,以及重点考察方法的具体实现过程
抽象类:二者中间:行为一样,实现不同
8..c#是一种纯粹面向对象的语言。面向对象语言具有什么特点?
抽象,封装 (结果是类),继承,多态
9.类和类之间有哪些关系?
继承,多态,聚合,组合,关联
10.@的作用是什么?
是转义字符失效,用在常量字符串前
表示常量字符串没有需要转义的字符
11.什么是序列化? 为什么要序列化?(什么时候必须作序列化?)如何实现序列化?
序列化:把对象数据成员转化为字节流,只序列化数据成员,不序列化方法
为了把对象保存到存储介质或者在网络上传输,做序列化!
默认的序列化方法:类的定义前加属性:Serializable,编译器会将序列化方法添加到类中
自定义序列化方法:接口:ISerilizable(GetOjbectData方法),还需要加上属性
序列化器:BinaryFormatter ,SoapFormatter
12.阐述C#中的访问修饰符。类和类的成员的访问修饰符分别有哪些?权限是什么?
类的Public:任何地方都可用,Internal:当前程序集中可用
类成员的
Public:
Protected:本身和子类
Private:
13.什么是操作符重载?为什么要操作符重载?如何实现操作符重载?
操作符重载:在不改变操作符固有的含义情况下,重新定义操作符,目的:扩大操作符的作用范围,必须公有,静态,放在一个类中
Public Static 返回类型 operator ——(参数列表),该操作符,作用在该类上
Class A
{
Public Static 返回类型 operator ——(A a, B。。)//必须出现一个
}
14.C#中有指针吗?
十三种基本数据类型有指针,其他数据类型没有指针,在非安全模式下用
15..c#中的委托是什么?事件是不是一种委托?委托的作用是什么?
委托:是一种特殊的类:不用Class而用Delegate定义,
目的:封装一个方法的名称
作用:取代C++中的函数指针,把方法封装在委托对象中
定义委托对象,达到传递方法的目的
事件时委托定义的一个变量,事件只能作为类的数据成员出现,不能再方法体中出现
16.什么是应用程序域?
将进程的进一步划分为多个应用程序域,每个应用程序域运行一个应用程序。应用程序域之间相互隔离,互不影响。
17.怎样理解托管代码?
运行在。NET平台上的代码,运行在CLR(Commom Language Runtime)公共语言运行库上的代码,都是托管代码
18.怎样理解强类型系统?
强类型系统:声明变量时,就指定其存放的数据类型,如C#;JavaScript是弱类型系统
19.解释装箱和拆箱
装箱:值类型到Ojbect类型,或者该值类型所实现的任何接口类型之间的转换。
对值类型装箱,会在堆上分配一个实例对象,并将该值复制到新的对象中。
在栈上 在堆上
Int i=123;
图示:
Object o=i;
拆箱与该操作相反。
20.const 和readonly 的区别是什么? ref、out、和 params的作用和区别是什么?
Const:定义常量,只能在定义时,初始化;
Readonly:只读变量,可以在定义时初始化,也可以在构造函数里初始化
Ref:强制引用传递,阻止形参对实参的临时拷贝,实参和形参指向同一存储区域,
Out:
Params:修饰传递可变参数的数组,