.Net C#面试题 20例。

1. 什么是类?  什么是结构体? 二者有什么区别? 相同点是什么? 你经常使用类还是结构体?为什么?

   类:同一类对象共同属性和行为的抽象

   结构体:同一类共同属性和行为的抽象

   二者区别:类:引用类型  结构体:值类型

   二者相同点:对共同属性和行为的抽象

2..怎样理解静态变量和静态方法? 静态构造函数的作用是什么?

   静态变量:属于类,不属于对象

   静态方法:不用创建类的实例,直接使用类的方法,方法变量在栈上,

   静态构造函数的作用: 初始化类的静态数据成员,在代码加载时执行;

程序中无法调用静态构造函数,此前的任何修饰符都是无效的;

                        静态构造函数,没有参数

3.值类型与引用类型有什么区别?

   值类型:数据存储在栈上,直接存储数据本身

   引用类型:数据存储在堆上,在栈上引用其地址

   二者区别:

所有内置对象,除了object和string 以外,都是值类型,所有用户定义类型,除了结构体都是引用类型;

                                                                                                                                                                                                                                                                                                                                                                                                      

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

除了基本类型,C#还有两种值类型:enum (枚举)和 struct(结构) ;

编译器会默认带小数点的数位double类型,要赋值给一个float型变量,需要在数字后面加上f;

常见转义字符 :

\单引号    \双引号  \\ 反斜杠    \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:修饰传递可变参数的数组, 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值