当前位置:首页 > Net软件工程师面试题
protected:表示受保护的访问,该类内部和继承类中可以访问 .public :表示公共访问,在代码任何位置都可对其进行访问 internal表示内部成员,在同一命名空间内可以访问。 2. C#中的委托是什么?事件是不是一种委托?
委托是指具有相同属性(也称具有相同的函数签名:返回类型相同,参数类型、参数顺序及参数个数相同)的函数或方法的抽象,关键字为delegate。主要用途是三个:1)函数回调;2)传递方法;3)事件机制
事件就是一个狭义的委托,也就是事件是一个用于事件驱动模型的专用委托,对事件的声明, 实际是声明一个私有的委托变量,对委托变量进行封装,即委托变量加上event关键字后,不管其前面的访问修饰符是public还是private,编译器都会将其编译为private。
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。以委托为参数的函数具有一定的通用性。
使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。
3. abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗? 不可以一起使用,但是可以和override一起使用。
4. 请叙述属性与索引器的区别。
属性:它是存取类的字段,索引器:Indexer它是特殊的属性,用它可以使用户像访问数组一样访问类的成员。
5. 请详述在dotnet中类(class)与结构(struct)的异同。
类class可以进行实例化,它是引用类型,内存分配在栈中,效率高,它有默认的构造函数,有析构函数可以使用 abstract 和 sealed, protected 修饰符。要用new进行初始化,
结构它是属于值类型,内存分配在堆中,效率低,它没有默认的构造函数,但是可以添加构造函数,没有析构函数没有 abstract 和 sealed(因为不能继承) 不能有protected 修饰符 可以不使用new 初始化,但是可以在结构中初始化实例字段。
四.分析程序(每题5分,共25分) (此题不能调试,若发现调试,扣除分数) 1. 写出程序的输出结果 class Class1 {
private string str = \ private int i = 0;
static void StringConvert(string str) { str = \ }
static void StringConvert(Class1 c) { c.str = \ }
static void Add(int i) { i++; }
static void AddWithRef(ref int i) i++; }
static void Main() { int i1 = 10; int i2 = 20; string str = \ Class1 c = new Class1(); Add(i1);
AddWithRef(ref i2); Add(c.i);
StringConvert(str); StringConvert(c); Console.WriteLine(i1); Console.WriteLine(i2); Console.WriteLine(c.i); Console.WriteLine(str); Console.WriteLine(c.str); }
} 10 21 0 str
{ string being converted 2.写出程序的输出结果 public abstract class A {
public A() {
Console.WriteLine('A'); }
public virtual void Fun() {
Console.WriteLine(\ } }
public class B: A {
public B() {
Console.WriteLine('B'); }
public override void Fun() {
Console.WriteLine(\ }
public static void Main() {
A a = new B(); a.Fun(); } }
解析:主函数 A a = new B();首先声明了一个A的对象a,但被赋给不同于A的对象B,在此期间分别调用了A类的构造函数和B类的构造函数,然后调用a的fun()函数,因为a的fun()函数是虚函数,被b的fun()的函数覆盖,所以实际执行的是b的fun().
答案: A B B.Fun()
3.写出程序的输出结果: public class A {
public virtual void Fun1(int i) {
Console.WriteLine(i); }
public void Fun2(A a) {
a.Fun1(1); Fun1(5); } }
public class B : A {
public override void Fun1(int i) {
base.Fun1 (i + 1); }
public static void Main() {
B b = new B(); A a = new A(); b.Fun2(a);
a.Fun2(b);
共分享92篇相关文档