Csharp⾯试题
c#⾯试问题 [转]
1.传⼊某个属性的set⽅法的隐含参数的名称是什么?
value,它的类型和属性所声名的类型相同。
2.如何在C#中实现继承?
在类名后加上⼀个冒号,再加上基类的名称。
3.C#⽀持多重继承么?
不⽀持。可以⽤接⼝来实现。
4.被protected修饰的属性/⽅法在何处可以访问?
在继承或间接继承与这个类的⼦类中可以访问。
5.私有成员会被继承么?
会,但是不能被访问。所以看上去他们似乎是不能被继承的,但实际上确实被继承了。
6.请描述⼀下修饰符protected internal。
被protected internal修饰的属性/⽅法只能在它的在同⼀个程序集(Assembly)中的⼦类被访问。
7.C#提供⼀个默认的⽆参数构造函数,当我实现了另外⼀个有⼀个参数的构造函数时候,还想保留这个⽆参数的构造函数。这样我应该写⼏个构造函数?
两个,⼀旦你实现了⼀个构造函数,C#就不会再提供默认的构造函数了,所以需要⼿动实现那个⽆参数构造函数。
8.C#中所有对象共同的基类是什么?
System.Object.
9.重载和覆写有什么区别?
重载提供了对⼀个⽅法签名的不同参数调⽤的实现。覆写提供了⼦类中改变⽗类⽅法⾏为的实现。
10.在⽅法定义中,virtual有什么含意?
被virtual修饰的⽅法可以被⼦类覆写。
11.能够将⾮静态的⽅法覆写成静态⽅法么?
不能,覆写⽅法的签名必须与被覆写⽅法的签名保持⼀致,除了将virtual改为override。
12.可以覆写私有的虚⽅法么?
不可以,甚⾄⼦类中⽆法访问⽗类中的私有⽅法。
13.能够阻⽌某⼀个类被其他类继承么?
可以,使⽤关键字sealed。
14.能够实现允许某个类被继承,但不允许其中的某个⽅法被覆写么?
可以,标记这个类为public,并标记这个⽅法为sealed。
15.什么是抽象类(abstract class)?
⼀种不可以被实例化的类。抽象类中⼀般含有抽象⽅法,当然也可有具体实现。继承类只有实现过所有抽象类的抽象⽅法后才能被实例化。
16.何时必须声明⼀个类为抽象类?
当这个类中包含抽象⽅法时,或是该类并没有完全实现⽗类的抽象⽅法时。
17.接⼝(interface)是什么?
只含有共有抽象⽅法(public abstract method)的类。这些⽅法必须在⼦类中被实现。
18.为什么不能指定接⼝中⽅法的修饰符?
接⼝中的⽅法⽤来定义对象之间通信的契约,指定接⼝中的⽅法为私有或保护没有意义。他们默认为公有⽅法。
19.可以继承多个接⼝么?
当然。
20.那么如果这些接⼝中有重复的⽅法名称呢?
这种情况中你可以决定如何实现。当然需要特别得⼩⼼。但是在编译环节是没有问题的。
21.接⼝和抽象类的区别是什么?
接⼝中
所有⽅法必须是抽象的,并且不能指定⽅法的访问修饰符。抽象类中可以有⽅法的实现,也可以指定⽅法的访问修饰符。22.如何区别重载⽅法?
不同的参数类型,不同的参数个数,不同的参数顺序。
const关键字⽤来声明编译时常量,readonly⽤来声明运⾏时常量。
24.System.String 和System.StringBuilder有什么区别?
System.String是不可变的字符串。System.StringBuilder存放了⼀个可变的字符串,并提供⼀些对这个字符串修改的⽅法。
传⼊某个属性的set⽅法的隐含参数的名称是什么?
value,它的类型和属性所声名的类型相同。
1.如何在C#中实现继承?
在类名后加上⼀个冒号,再名称。
2.C#⽀持多重继承么?
不⽀持。可以⽤接⼝来实现。
3.被protected修饰的属性/⽅法在何处可以访问?
在继承或间接继承与这个类的⼦类中可以访问。
4.私有成员会被继承么?
会,但是不能被访问。所以看上去他们似乎是不能被继承的,但实际上确实被继承了。
5.请描述⼀下修饰符protected internal。
protected internal表⽰同⼀个程序集或继承的可以访问,被protected internal修饰的属性/⽅法在同⼀个程序集中相当于public,在不同程序集中相对protected
6.C#提供⼀个默认的⽆参数构造函数,当我实现了另外⼀个有⼀个参数的构造函数时候,还想保留这个⽆参数的构造函数。这样我应该写⼏个构造函数?
两个,⼀旦你实现了⼀个构造函数,C#就不会再提供默认的构造函数了,所以需要⼿动实现那个⽆参数构造函数。
7.C#中所有对象共同的基类是什么?
System.Object
8.重载和重写有什么区别?
重载提供了对⼀个⽅法签名的不同参数调⽤的实现。重写提供了⼦类中改变⽗类⽅法⾏为的实现。
9.在⽅法定义中,virtual有什么含意?
被virtual修饰的⽅法可以被⼦类重写。
10.能够将⾮静态的⽅法重写成静态⽅法么?
不能,重写⽅法的签名必须与被重写⽅法的签名保持⼀致,除了将virtual改为override。
11.可以重写私有的虚⽅法么?
不可以,甚⾄⼦类中⽆法访问⽗类中的私有⽅法。
12.能够阻⽌某⼀个类被其他类继承么?
可以,使⽤关键字sealed。
13.能够实现允许某个类被继承,但不允许其中的某个⽅法被重写么?
可以,标记这个类为public,并标记这个⽅法为sealed。
14.什么是抽象类(abstract class)?
⼀种不可以被实例化的类。抽象类中⼀般含有抽象⽅法,当然也可有具体实现。继承类只有实现过所有抽象类的抽象⽅法后才能被实例化。
15.何时必须声明⼀个类为抽象类?
当这个类中包含抽象⽅法时,或是该类并没有完全实现⽗类的抽象⽅法时。
16.接⼝
(interface)是什么?
只含有共有抽象⽅法(public abstract method)的类。这些⽅法必须在⼦类中被实现。
17.为什么不能指定接⼝中⽅法的修饰符?
接⼝中的⽅法⽤来定义对象之间通信的契约,指定接⼝中的⽅法为私有或保护没有意义。他们默认为公有⽅法。
18.可以实现多个接⼝么?
当然。
19.那么如果这些接⼝中有重复的⽅法名称呢?
这种情况中你可以决定如何实现。当然需要特别得⼩⼼。但是在编译环节是没有问题的。
20.接⼝和抽象类的区别是什么?
接⼝中所有⽅法必须是抽象的,并且不能指定⽅法的访问修饰符。抽象类中可以有⽅法的实现,也可以指定⽅法的访问修饰符。
21.如何区别重载⽅法?
不同的参数类型,不同的参数个数,不同的参数顺序。
const关键字⽤来声明编译时常量,readonly⽤来声明运⾏时常量。
23.System.String 和System.StringBuilder有什么区别?
System.String是不可变的字符串。System.StringBuilder存放了⼀个可变的字符串,并提供⼀些对这个字符串修改的⽅法。24.什么是装箱和拆箱?
从值类型接⼝转换到引⽤类型装箱。从引⽤类型转换到值类型拆箱。
25.接⼝是⼀种引⽤类型,在接⼝中可以声明(),但不可以声明公有的域或私有的成员变量。
⽅法、属性、索引器和事件
26.了解描述www.doczj/doc/5a60b6282af90242a895e571.html 页⾯的⽣命周期
27.如何理解委托?
28.了解程序集强签名吗?
29.请解释应⽤程序域、程序集、元数据、反射这⼏个技术名词
30.简单说说 www.doczj/doc/5a60b6282af90242a895e571.html 中基于表单的⾝份验证⽅式的⽤法
www.doczj/doc/5a60b6282af90242a895e571.html 中如何调⽤ Web Service 的⽅法?
32.ViewState 的作⽤和实现⽅式?
33.列举你所了解的XML技术及其应⽤
1.Thread和Process之间有什么区别?.NET新引⼊了Application Domain的概念,这样他们三个之间有什么区别?引⼊了
Application Domain会带来⼀些潜在的问题么?
2.Windows Service与普通的EXE在执⾏过程中有什么区别?
3.⼀个进程可以访问的Windows地址空间有多⼤?等于系统的虚拟内存⼤⼩么?这两⽅⾯将对系统的设计产⽣什么样的影响?
4.EXE和DLL之间的区别是什么?在系统设计中应该如何选择使⽤它们?
5.普通的EXE与.NET EXE的执⾏过程有什么不同?
6.什么是弱类型,什么是强类型?在系统设计中应该⾸先考虑使⽤哪种类型?
7.PDB⽂件是作什么⽤的?⾥⾯包含了什么信息?
8.Cycloramic Complexity是什么?为什么它很重要?
9.为创建⼀个critical section以访问某个变量书写⼀个标准的lock() 并加上double check。
10.为某个对象实现标准的Dispose模式。
11.什么是FullTrust? 存在于GAC中的 assembly 拥有FullTrust么?
12.下⾯这个命令是做什么的?gacutil /l |
find /i “system”
13.下⾯这个命令是作什么的? sn -t something.dll
14.跨防⽕墙的 DCOM必须打开哪个端⼝?端⼝135是⽤来做什么的?
15.有什么办法可以与现有unmanaged code集成?在集成的时候应该考虑什么问题?
16.简要解释⼀下OOP与SOA都是⽤来作什么的?
17.XmlSerializer是如何⼯作的?进程运⾏XmlSerializer时候需要什么样的ACL权限?
18.在系统设计时,何时应该使⽤try catch?何时需要避免使⽤?
19.Debug.Write()和Trace.Write()之间有什么区别?⼆者分别应该⽤于何处?
20.Debug Build和Release Build有什么区别?在执⾏效率上有什么明显的区别么?
21.JIT是针对Assembly还是Method发⽣的?解释⼀下为什么.NET的设计者要这样做?
22.简要描述⼀下GC的执⾏过程。
23.应该如何选择使⽤abstract class还是interface?
24.在设计⼀个⾃定义类型时应如何选择使⽤Value Type还是Reference Type?
25.对于Value Type和Reference Type,a.Equals(b)的默认实现⽅式有什么不同?
www.doczj/doc/5a60b6282af90242a895e571.html 中为什么不提供默认的deep copy?如果需要,要如何实现deep copy?
27.相对于.NET 1.1,.NET2.0为了避免过度的boxing/unboxing造成的系统开销提供了哪些⽀持?
28.String是Value Type还是Reference Type?为什么.NET中的String对象被设置成immutable?
C#基本问题列表——⾯试通常题 (转)
1、String str=new String("a")和String str = "a"有什么区别?
String str = "a"; 这个只是⼀个引⽤,内存中如果有“a"的话,str就指向它,如果没有才创建如果你以后还⽤到"a"这个字符串的话并且是这样⽤: String str1 = "a"; String str2 = "a"; String str2 = "a"; 这4个变量都共享⼀个字符串"a" ⽽String str = new String("a");是根据"a"这个String对象再次构造⼀个String对象,将新构造出来的String对象的引⽤赋给str
2、判断字符串变量str是否为空的⼀下三种⽅法哪个性能更优:a、str=="";b、str==String.Empty;c、str.Length==0;?
答案是c;原因我就不说了。
3、string与String的区别
string、int是C#定义的类型,⽽String、Int32是类型即是CTS类型;
string 是 .NET 框架中 System.String 的别名。
string在编译的时候会转化为String类
4、虚⽅法(virtual )和抽象⽅法(abstract)的区别?
之⼀:抽象⽅法仅有声明,⽽没有任何实现,如abstract someMethod();,虚⽅法却不能如此
之⼆:⼦类继承⽗类,可以对⽗类中的虚⽅法进⾏重写、覆盖、不处理三种处理(见5),对抽象⽅法却必须实现
5、⼦类对⽗类中虚⽅法的处理有重写(override)和覆盖(new),请说明它们的区别?
有⽗类ParentClass和⼦类ChildClass、以及⽗类的虚⽅法VirtualMethod。有如下程序段:
ParentClass pc = new ChildClass();
pc.VirtualMethod(...);
如果⼦类是重写(override)⽗类
的VirtualMethod,则上⾯的第⼆⾏语句将调⽤⼦类的该⽅法
如果⼦类是覆盖(new)⽗类的VirtualMethod,则上⾯的第⼆⾏语句将调⽤⽗类的该⽅法
6、抽象类(abstract)和接⼝(interface)的区别
抽象类可以有⾃⼰的实现,接⼝却仅有声明,可以有⾃⼰的静态数据字段;
java和C#中可以实现多个接⼝,却只能继承⼀个抽象类(或者⾮抽象类)(单继承,和c++的多继承不同);
使⽤ Override 和 New 关键字控制版本
C# 语⾔经过专门设计,以便不同库中的基类与派⽣类之间的版本控制可以不断向前发展,同时保持向后兼容。这具有多⽅⾯的意义。例如,这意味着在基类中引⼊与派⽣类中的某个成员具有相同名称的新成员在 C# 中是完全⽀持的,不会导致意外⾏为。它还意味着类必须显式声明某⽅法是要重写⼀个继承⽅法,还是⼀个仅隐藏具有类似名称的继承⽅法的新⽅法。
C# 允许派⽣类包含与基类⽅法名称相同的⽅法。
基类⽅法必须定义为 virtual。
如果派⽣类中的⽅法前⾯没有 new 或 override 关键字,则编译器将发出警告,该⽅法将有如存在 new 关键字⼀样执⾏操作。
如果派⽣类中的⽅法前⾯带有 new 关键字,则该⽅法被定义为独⽴于基类中的⽅法。
如果派⽣类中的⽅法前⾯带有 override 关键字,则派⽣类的对象将调⽤该⽅法,⽽不调⽤基类⽅法。
可以从派⽣类中使⽤ base 关键字调⽤基类⽅法。
override、virtual 和 new 关键字还可以⽤于属性、索引器和事件中。
默认情况下,C# ⽅法不是虚⽅法 -- 如果将⼀种⽅法声明为虚⽅法,则继承该⽅法的任何类都可以实现其⾃⼰的版本。若要使⽅法成为虚⽅法,必须在基类的⽅法声明中使⽤ virtual 修饰符。然后,派⽣类可以使⽤ override 关键字重写基虚⽅法,或使⽤ new 关键字隐藏基类中的虚⽅法。如果 override 关键字和 new 关键字均未指定,编译器将发出警告,并且派⽣类中的⽅法将隐藏基类中的⽅法。
--------------------------------------
>c++string类型
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论