您的位置:首页 > 职场人生

C#面试常见题目

2017-11-06 20:57 204 查看
1、CTS、CLS、CLR分别作何解释

CTS:Common Type System 通用系统类型。Int32、Int16→int、String→string、Boolean→bool

CLS:Common Language Specification 通用语言规范。不同语言语法的不同。

CLR:Common Language Runtime 公共语言运行时,就是.Net提供的那些类

2、C#中的接口和类有什么异同。

不同点:

不能直接实例化接口。

接口不包含方法的实现。

接口可以多继承,类只能单继承。

类定义可在不同的源文件之间进行拆分。

相同点:

接口、类和结构都可以从多个接口继承。

接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。

接口和类都可以包含事件、索引器、方法和属性。

3、abstract class和interface有什么区别?

相同点:

都不能被直接实例化,都可以通过继承实现其抽象方法。

不同点:

接口支持多继承;抽象类不能实现多继承。

接口只能定义行为;抽象类既可以定义行为,还可能提供实现。

接口可以用于支持回调(CallBack);抽象类不能实现回调,因为继承不支持。

接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现的方法;

抽象类可以定义字段、属性、包含有实现的方法。

接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。

4、描述线程与进程的区别?

1.线程(Thread)与进程(Process)二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。

2.一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。而同一进程中的不同线程共享代码和数据空间。用一个比喻来说,如果一个家庭代表一个进程,在家庭内部,各个成员就是线程,家庭中的每个成员都有义务对家庭的财富进行积累,同时也有权利对家庭财富进行消费,当面对一个任务的时候,家庭也可以派出几个成员来协同完成,而家庭之外的人则没有办法直接消费不属于自己家庭的财产。

5、什么时候使用抽象类,什么时候用接口


接口用于规范,抽象类用于共性。

接口中只能声明方法,属性,事件,索引器。而抽象类中可以有方法的实现,也可以定义非静态的类变量。抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。抽象类可以提供某些方法的部分实现,接口不可以.抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的。再抽象类中加入一个方法,那么它的子类就同时有了这个方法。而在接口中加入新的方法,那么实现它的类就要重新编写(这就是为什么说接口是一个类的规范了)。接口成员被定义为公共的,但抽象类的成员也可以是私有的、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。此外接口不能包含字段、构造函数、析构函数、静态成员或常量。

6、请编程实现一个冒泡排序算法?

答:int [] array= new int [*] ;

  int temp = 0 ;

  for (int i = 0 ; i < array.Length - 1 ;i++)

  {

    for (int j = i + 1 ; j < array.Length ;j++)

    {

      if (array[j] < array[i])

      {

        temp = array[i] ;

        array[i] = array[j] ;

        array[j] = temp ;

      }

    }

  }

7、.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m

答:int Num =this.TextBox1.Text.ToString() ;

  int Sum = 0 ;

  for (int i = 0 ; i < Num + 1 ; i++)

  {

    if((i%2) == 1)

    {

      Sum += i ;

    }

    else

    {

      Sum = Sum - i ;

    }

  }

  Console.WriteLine(Sum.ToString());

  Console.ReadLine() ;

8、常用的调用WebService的方法有哪些?

答:1.使用WSDL.exe命令行工具。

2.使用VS.NET中的Add Web Reference菜单选项

9、 .net Remoting 的工作原理是什么?

答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。

10、谈谈final,finally, finalize的区别。

答:final-修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中 不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为 final的方法也同样只能使用,不能重载

  finally-再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

  finalize-方法名。Java 技术允许使用finalize() 方法在垃圾收集器将对像从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的 ,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对像之前对这个对象调用的。

11、常用的调用WebService的方法有哪些?

答:1.使用WSDL.exe命令行工具。

2.使用VS.NET中的Add Web Reference菜单选项

12、猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
要求:
1.要有联动性,老鼠和主人的行为是被动的。
2.考虑可扩展性,猫的叫声可能引起其他联动效应。

要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象
评分标准: <1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)
<2>从Mouse和Master中提取抽象(5分)
<3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)

首先我们要定义一个委托,语法为:

delegate void 名称()

例如 delegate void MyDelete()-----表示的是该委托应该与一个返回值为Void 并且没有参数的方法相互绑定

现在我们定义一个猫类:

public class Cat
{
/// <summary>
/// 声明一个委托
/// </summary>
public delegate void MyDelete();


}

该类就声明了一个委托,下面我们把这个类给补充完整如下:

public class Cat
{
/// <summary>
/// 声明一个委托
/// </summary>
public delegate void MyDelete();
/// <summary>
/// 猫叫的事件(猫叫了以后干什么)
/// </summary>
public event MyDelete CatShut;

/// <summary>
/// 定义一个猫叫的方法
/// </summary>
public void MyCatShut()
{
Console.WriteLine("小猫叫了一声....");
//如果这个事件不是空的(就意味着猫叫的事件是被订阅的)
if (CatShut != null)
{
CatShut();
}
}
}

---我们已经把猫的类写好了

那么 就需要老鼠和主人来订阅猫叫的事件,我们就需要定义一个老鼠类和主人类,如下

public class Mouse
{
/// <summary>
/// 老鼠跑的方法
/// </summary>
public void Run()
{
Console.WriteLine("老鼠听到猫叫,就开始逃窜");
}
}

老鼠就只有一个方法 跑的方法 因为当老鼠听到猫叫的时候就要开始跑了

同理,主人也该有一个醒来的方法,如下

public class People
{
/// <summary>
/// 主人起床的方法
/// </summary>
public void WakeUp()
{
Console.WriteLine("主人被吵醒了");
}
}

现在,事件源(猫)和事件订阅者(老鼠和主人)都已经有了,那么该如何去订阅猫叫的事件呢?

我们就需要在测试类中写出一个这样的方法,如下:

class Program
{
static void Main(string[] args)
{
Cat c = new Cat();--实例化一个猫类
Mouse h = new Mouse();---实例化一个老鼠类
People p = new People();---实例化一个主人 类
c.CatShut += new Cat.MyDelete(h.Run);//老鼠注册了一个猫叫的事件
c.CatShut+=new Cat.MyDelete(p.WakeUp);//主人也注册了一个猫叫的事件
c.MyCatShut(); --猫叫(如果不调用该方法,那么猫就不会叫,猫不会叫那么主人和老鼠就不会醒和跑了)
Console.ReadLine();
}

}

运行效果就会看到一个联动的效果,其实也是一种设计模式 观察者模式

此时猫是一个事件源 (就好比移动公司推出的某项业务),而主人和老鼠呢都是事件的订阅者(好比有客户去开通这个业务)那么,当猫叫的时候,主人和老鼠都收到相应的信息(只要订阅了移动公司的这项业务,就都能收到短信,而没有订阅的客户就不能收到短信)。但是,当老鼠和猫已经和谐了以后,老鼠不在怕猫了,就不在订阅猫叫的事件,那么下次猫在叫的时候,老鼠就不会跑了(当我们取消了移动公司的某项业务那么下次它就不会发送消息给我们 是一个道理)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: