C# 常见的面试问题

原文:http://www.cnblogs.com/Yjianyong/archive/2010/08/05/1792774.html

第一章 C#与.NET框架
1、简述什么是CLR?
答:  公共语言运行时,它负责管理用.NET库开发的所有应用程序的执行。                        
          2、简述什么是FCL?
答:  Framework Class Library  .NET框架类库集                                                   
    3、简述什么是CLS和CTS
答: CLS(通用语言运行规范)、CTS(通用类型系统)。                                             
4、简述什么是JIT?
答:即时编译。                                                                         
5、简述C#程序编译运行的全过程。
答:(1)把源代码编译为Microsoft中间语言(IL)。(2)CLR把IL编译为平台专用的代码。          
          6、比较.NET和Java的异同。
答:java与.net的相同:(1)都有虚拟机 (2)都有庞大的类库(3)代码都在虚拟机保护模式下运行 java与.net的不同:(1)java是多次运行时都解析,而.net是在第一次运行时解析后,以后执行的就是本机代码(2).net虚拟机代码公开,各种语言都可以基于.net虚拟机进行开发。(3).net暂时不支持跨平台,不过只要虚拟机一跨平台,你所有的程序就跨平台了。                                                        7、简述用C#编写什么样的应用程序?
答:(1)Windows应用程序(2)Web应用程序(3)Web服务。                             
  
 8、简述C#与.NET的关系。
答: (1) C#的结构和方法论反映了.NET基础方法论。(2)在许多情况下,C#的特定语言功能取决于.NET的功能,或依赖于.NET基类。                 9、简述.NET框架的作用。
答: .NET Framework是Microsoft为开发应用程序而创建的一个富有革命性的新平台。                   
     10、简述.NET框架的组成。
答:它由两部分组成,公共语言运行时(CLR)和.NET类库集(FCL)组成。                              
    11、在.NET中编译分为哪两个阶段?
答:(1)把源代码编译为Microsoft中间语言(IL)。(2)CLR把IL编译为平台专用的代码。                 
   12、MSIL的是什么意思?
答:微软中间语言。                        
1、CTS通用类型系统 (common type system)。
答:一种确定公共语言运行库如何定义、使用和管理类型的规范。                              
2、CLR公共语言运行库。
答:.NET Framework 提供了一个称为公共语言运行库的运行时环境,它运行代码并提供使开发过程更轻松的服务3、CLS公共语言规范。
答:要和其他对象完全交互,而不管这些对象是以何种语言实现的,对象必须只向调用方公开那些它们必须与之互用的所有语言的通用功能。为此定义了公共语言规范 (CLS),它是许多应用程序所需的一套基本语言功能。       4、强类型。
答:C# 是强类型语言;因此每个变量和对象都必须具有声明类型。  

第二章 C#基础及数据类型
1、简述C#编写程序的语法规则?
答:(1)区分大小写(2) 语句以分号作为结束标志(3)注释 // 开头,或多行注释            2、C#程序是从 Main()方法开始执行的。
3、如何实现多行注释?
答:。                                                                              
4、在目前理解的范围内简述Console类的作用。
答:表示控制台应用程序的标准输入流、输出流和错误流。                                                 5、如何实现控制台输入?
答: Console.Read()                                                                              
     Console.ReadLine()                                                                     
6、如何实现控制台输出?
答: Console.Write()                                                                                
     Console.WriteLine()                                                                             7、Console.ReadLine() 和 Console.Read()的区别?
答: Console.Read():从标准输入流读取下一个字符。                                                        Console.ReadLine():从标准输入流读取下一行字符。                                                8、Console.WriteLine() 和Console.Write()的区别?
答: Console.WriteLine():  将指定的数据(后跟当前行结束符)写入标准输出流。                              Console.Write():将指定值的文本表示形式写入标准输出流。                                         9、列举8种基本的整数类型。
答: byte   int   short   long                                                             
     Sbyte   uint   ushout  ulong                  
1、什么是受管制的代码?
答:unsafe:非托管代码。不经过CLR运行。                                              
2、public static const int A=1;这段代码有错误么?是什么?
答:const不能用static修饰。                                

第三章 运算符与表达式
1、按照操作符作用的操作数的个数来分,C#有几种类型的操作符?
答:三种,分别是(1)一元操作符(2)二元操作符(3)三元操作符                               
2、c#中的三元运算符是  答:?:                                                          
           3、表达式由什么组成?
答:表达式由操作符和操作数组成。                                                                
    4、简述赋值操作符(=)的作用是什么?
答:赋值运算符 (=) 将右操作数的值存储在左操作数表示的存储位置、属性或索引器中,并将值作为结果返回。操作数的类型必须相同(或右边的操作数必须可以隐式转换为左边操作数的类型)。                      
    5、列举几个复合操作符?
答:+=、 -=、 *=、 /=、 %=、 &=、 |=、 ^= 、<<=、 >>=。                                        
     6、简单说说 % 求余操作符的作用?
答:模数运算符 (%) 计算第二个操作数除第一个操作数后的余数。所有数值类型都具有预定义的模数运算符。 
  17、获得八维认证的条件是综合积分大于等于100分,平均成绩>=75分,案例成绩>=85分,请写出可以获得认证的条件表达式。
答:zonghejifen>=100 and average>=75 and anli>=85 (假设定义了三个变量)                           
  18、应征入伍的条件是性别为男时,身高在170cm以上,年龄在18到25周岁之间,性别为女是,身高在160cm以上,年龄在18到22周岁之间,请写出符合入伍的条件。
答:( sex = “男” and age >=18 and age<=25 and high>=170 )                                     or  (sex = “女” and age >=18 and age<=22 and high>=160 )                             
19、加法操作符,在操作数为数值和字符时有不同的作用,请简述。
答:为数值类型和字符串类型预定义了二元 + 运算符。对于数值类型,+ 计算两个操作数之和。当其中的一个操作数是字符串类型或两个操作数都是字符串类型时,+ 将操作数的字符串表示形式串联在一起。             
   20、逻辑操作符有哪几个?
答:逻辑与 (&&) 逻辑或(||) 逻辑非(!)。                                            
21、逻辑操作符 与 关系操作符 的结果是什么数据类型?
答: 逻辑表达式 或关系表达式的结果是布尔类型,值是逻辑值,真(True)或假(False)。       
30、运算符的优先级是什么?
答:当多个运算符一起运算时,根据它们的优先级别不同执行运算的先后顺序不同。         
    算数  ——> 逻辑——>关系——>赋值       

第四章 流程控制语句:
1、程序有三种基本结构,分别是什么?
答:顺序结构、选择结构、循环结构                                                       
2、简述while 循环与do while循环的区别?
答:while 循环先对表达式进行判断,当满足表达式的时候才开始执行循环体,所以循环体执行的次数大于等于0次,而 do while 是先执行一次循环体然后在对表达式的内容做判断,所以执行循环体的次数是大于等于1次,如果第一次表达式满足条件,两种格式相同,如果第一次不满足条件,则后者多执行一次。                   
  3、什么时候使用for循环,什么时候使用while循环?
答:当循环次数已知的条件下,使用for 循环方便,当循环次数未知时候我们一般使用while型循环。(依个人编程习惯,没有统一的要求)                         
8、列举几个跳转语句。
答:(1) go to (2) break (3) continue (4) return                                                   
  9、简述break语句的作用。
答:在switch语句中使用它退出某个case语句。实际上,break也可以用于退出for、foreach、while或do...while循环,循环结束后,就执行循环后面的语句。如果该语句放在嵌套的循环中,就执行最内部循环后面的语句。如果break放在switch语句或循环外部,就会产生编译时错误。       
10、简述continue的作用。
答:continue语句类似于break,也必须在for、foreach、while或 do...while循环中使用。但它只从循环的当前迭代中退出,然后在循环的下一次迭代开始重新执行,而不是退出循环。        
11、简述return 语句的作用。
答: return语句用于退出类的方法,把控制返回方法的调用者,如果方法有返回类型,return语句必须返回这个类型的值,如果方法没有返回类型,应使用没有表达式的return语句。

第五章 类与对象
1、简述类的概念?
答:类是一组具有相同数据结构和相同操作的对象的集合。类是对一系列具有相同性质的对象的抽象,是对对象共同特征的描述  。                                                            
2、简述对象的概念?
答:对象是面向对象开发方法的基本成分。每个对象可用它本身的一组属性和其上的一组操作来定义。对象可以是现实生活中的一个物理对象,还可以是某一类概念实体的实例。比如,一辆汽车、一个人、一本书,乃至一种语言、一个图形、一种管理方式,都可以作为一个对象。                                                       3、面向对象的语言具有 继承_性、 封装_性、 多态 性。
4、new 关键字用法?
答:(1)new 运算符用于创建对象和调用构造函数 。(2)new 修饰符用于向基类成员隐藏继承成员 。(3)new 约束用于在泛型声明中约束可能用作类型参数的参数的类型。                                                   5、C#中所有对象共同的基类是什么?
答:System.Object.            
11、值类型与引用类型的区别是什么?
答:值类型:存储的是数值本身,值类型都存储在堆栈中。                                                     引用类型:表示指向数据的指针或引用(地址),包含内存堆中对象的地址。
20、简单说说方法的概念。
答:方法是与某个类相关的函数,它们可以是实例方法,也可以是静态方法。实例方法处理类的某个实例,静态方法提供了更一般的功能,不需要实例化一个类(例如Console.WriteLine()方法)。                              21、简单说说属性的概念。
答:属性是可以在客户机上访问的函数组,其访问方式与访问类的公共字段类似。C#为读写类上的属性提供了专用语法,所以不必使用那些名称中嵌有Get或Set的偷工减料的方法。因为属性的这种语法不同于一般函数的语法,在客户代码中,虚拟的对象被当做实际的东西。                    
22、简述构造函数的作用。
答:构造函数是在实例化对象时自动调用的函数。它们必须与所属的类同名,且不能有返回类型。构造函数用于初始化字段的值。                                                             
23、终结器是什么?
答:终结器类似于构造函数,但是在CLR检测到不再需要某个对象时调用。它们的名称与类相同,但前面有一个~符号。                                                                       
24、简述运算符的概念、作用。
答:运算符执行的最简单的操作就是+和–。在对两个整数进行相加操作时,严格地说,就是对整数使用+运算符。C#还允许指定把已有的运算符应用于自己的类(运算符重载)。索引器允许对象以数组或集合的方式进行索引。
 
  1、 new 关键字用法?
答:(1)new 运算符用于创建对象和调用构造函数。(2)new 修饰符用于向基类成员隐藏继承成员。(3)new约束用于在泛型声明中约束可能用作类型参数的参数的类型。   
                             
2、访问性级别有哪几种?
答:public 访问不受限制。protected 访问仅限于包含类或从包含类派生的类型。internal 访问仅限于当前程序集。protected internal 访问仅限于从包含类派生的当前程序集或类型。private 访问仅限于包含类型。      
 3、值类型和引用类型的区别?
答:基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。所有的值类型均隐式派生自 System.ValueType。与引用类型不同,从值类型不可能派生出新的类型。但与引用类型相同的是,结构也可以实现接口。与引用类型不同,值类型不可能包含 null 值。然而,可空类型功能允许将 null 赋给值类型。每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。值类型主要由两类组成:结构、枚举。结构分为以下几类:Numeric(数值)类型、整型、浮点型、decimal、bool、用户定义的结构。引用类型的变量又称为对象,可存储对实际数据的引用。声明引用类型的关键字:class、interface、delegate、内置引用类型: object、string。
 4、面向对象的思想主要包括什么?
答:继承 多态封装。                                                                  
 
第六章 类的方法
1、声明一个方法的基本格式。         
答:在C#中,方法的定义包括方法的修饰符(例如方法的可访问性)、返回值的类型,然后是方法名、输入参数的列表(用圆括号括起来)和方法体(用花括号括起来)。                               
2、当方法没有返回值时如何定义方法?
答:如果方法没有返回值,就把返回类型指定为void,因为不能省略返回类型。如果方法不带参数,仍需要在方法名的后面写上一对空的圆括号()。                                             
3、在C# 中如何调用方法?
答:如果调用本类的方法,则直接是方法的名字加括号,括号里放参数,如果是对象调用方法,则是对象名后加个圆点后是方法的名字加括号,括号力放参数。                                   
4、在C#中方法的参数分为哪两种?
答:值类型参数和引用类型参数。                                                         
5、在C# 中如果值类型的参数想转换为按引用传递,如何解决这个问题?
答:使用关键字out或者ref。          
7、重载的概念是什么?
答:每个类型成员都有一个唯一的签名。方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成。只要签名不同,就可以在一种类型内定义具有相同名称的多种方法。当定义两种或多种具有相同名称的方法时,就称作重载。                                                     
8、如何区别重载方法?
答:不同的参数类型,不同的参数个数,不同的参数顺序。         
14、C#提供一个默认的无参数构造函数,当我实现了另外一个有一个参数的构造函数时候,还想保留这个无参数的构造函数。这样我应该写几个构造函数?
答:两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。                                                                    
15、简述ref 关键字的作用?
答:通过值传送变量是默认的,也可以迫使值参数通过引用传送给方法。为此,要使用ref关键字。如果把一个参数传递给方法,且这个方法的输入参数前带有ref关键字,则该方法对变量所作的任何改变都会影响原来对象的值
16、简述out 关键字的作用?
答:out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。                       
 7、简述ref 与 out 的区别?
答:ref 和out 关键字都会导致参数通过引用来传递。不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。           
18、简述this 关键字的作用?
答:(1) 限定被相似的名称隐藏的成员(2)将对象作为参数传递到其他方法(3)声明索引器。           
    30、当方法没有返回值时,可以省略不写返回值的类型嘛?
答:不可以。当方法返回值为空时,加关键字void。                                        
1、重载的概念是什么?
答:每个类型成员都有一个唯一的签名。方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成。只要签名不同,就可以在一种类型内定义具有相同名称的多种方法。当定义两种或多种具有相同名称的方法时,就称作重载。                                                      
2、类成员有几种可访问形式?
答:this.;new Class().Method;   

第七章 静态成员与静态类
1、静态类的作用?
答:静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。                                    
2、如何声明一个静态类?
答:在声明类的时候前加一个关键字static。                                              
3、public static const int A=1;这段代码有错误么?是什么?
答:const成员都是static所以应该去掉static。                                                      
4、请叙述const与readonly的区别。
答:const关键字用来声明编译时常量,readonly用来声明运行时常量。                       
5、简单说说使用静态类的好处?
答:使用静态类作为不与特定对象关联的方法的组织单元。此外,静态类能够使您的实现更简单、迅速,因为您不必创建对象就能调用其方法。以一种有意义的方式组织类内部的方法(例如 System 命名空间中的 Math 类的方法)是很有用的。                                                 
6、C#提供一个默认的无参数构造函数,当我实现了另外一个有一个参数的构造函数时候,还想保留这个无参数的构造函数。这样我应该写几个构造函数?
答:两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。                                                                       
7、成员变量和成员函数前加static的作用?
答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。                  
8、列举几个目前你使用过的静态成员。
答:Console.Read()、Console.ReadLine()、Console.Write()、Console.WriteLine()等等…                 
 9、能够将非静态的方法覆写成静态方法么?
答:不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override。   
10、简单描述静态类的作用?
答:它们仅包含静态成员。它们不能被实例化。它们是密封的。它们不能包含实例构造函数                 
   1、C#提供一个默认的无参数构造函数,当我实现了另外一个有一个参数的构造函数时候,还想保留这个无参数的构造函数。这样我应该写几个构造函数?
答:两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。                                                                      
2、成员变量和成员函数前加static的作用?
答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。                   
 
第八章 数组
三、面试题:
1、数组有没有length()这个方法? String有没有length()这个方法?
答:数组和string都没有Length()方法,只有Length属性。                                    
2、产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
int[] intArr=new int[100];
ArrayList myList=new ArrayList();
Random rnd=new Random();
while(myList.Count<100)
{
int num=rnD、Next(1,101);
if(!myList.Contains(num))
myList.Add(num);
}
for(int i=0;i<100;i++)
intArr[i]=(int)myList[i];

第九章 属性和索引器
1、属性可以分为哪三种不同的类型?
答:读写属性、只读属性、只写属性。      
三、面试题:
1、传入某个属性的set方法的隐含参数的名称是什么?
答:value,它的类型和属性所声名的类型相同。                                            
2、描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
答:可以用任意类型。 

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值