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();
        }

}

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

此时猫是一个事件源 (就好比移动公司推出的某项业务),而主人和老鼠呢都是事件的订阅者(好比有客户去开通这个业务)那么,当猫叫的时候,主人和老鼠都收到相应的信息(只要订阅了移动公司的这项业务,就都能收到短信,而没有订阅的客户就不能收到短信)。但是,当老鼠和猫已经和谐了以后,老鼠不在怕猫了,就不在订阅猫叫的事件,那么下次猫在叫的时候,老鼠就不会跑了(当我们取消了移动公司的某项业务那么下次它就不会发送消息给我们 是一个道理)

C#面试常见题目的更多相关文章

  1. java异常面试常见题目

    在Java核心知识的面试中,你总能碰到关于 处理Exception和Error的面试题.Exception处理是Java应用开发中一个非常重要的方面,也是编写强健而稳定的Java程序的关键,这自然使它 ...

  2. java面试常见题目

    JAVA相关基础知识面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用 ...

  3. mysql面试常见题目2

    Sutdent表的定义 字段名 字段描述 数据类型 主键 外键 非空 唯一 自增 Id 学号 INT(10) 是 否 是 是 是 sName 姓名 VARCHAR(20) 否 否 是 否 否 Sex ...

  4. JavaScript求数组Array的并集(javascript面试常见题目)

    var Utils = { joinArray:function(source,target){ for(var i = 0;i<source.length;i++){ var oa = sou ...

  5. mysql面试常见题目

    第一题 某班学生和考试成绩信息如下表Student所示: Student表 ID SName Mark 1 Jack 90 2 Marry 96 3 Rose 88 4 Bob 86 5 John 8 ...

  6. 数据仓库与BI面试常见题目

    一. 数据库 1. Oracle数据库,视图与表的区别?普通视图与物化视图的区别?物化视图的作用?materialized view 答:a:视图是虚拟表,提高了表的安全性,视图没有实际物理空间,而表 ...

  7. mysql面试常见题目3

    三十六大 冯唐 春水初生, 春林初盛, 春风十里,不如你. 秋风落叶, 秋雨绵绵, 愁心上秋,只为你. 某个员工信息表结构和数据如下: id name dept salary edlevel hire ...

  8. Net基础篇_学习笔记_第九天_数组_冒泡排序(面试常见题目)

    冒泡排序: 将一个数组中的元素按照从大到小或从小到大的顺序进行排列. for循环的嵌套---专项课题 int[] nums={9,8,7,6,5,4,3,2,1,0}; 0 1 2 3 4 5 6 7 ...

  9. Android常见面试笔试题目

    Android常见面试笔试题目 1.在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 答:可以处理消息循环的线程,他是一个拥 ...

随机推荐

  1. Sublime Text 3 配置分析与我的配置---小结

    Sublime Text 3 配置解释(默认){// 设置主题文件"color_scheme": "Packages/Color Scheme – Default/Mon ...

  2. 记录优雅的pythonic代码

    记录平时学习中接触到的和网上看到的一些pythonic的方法,只为日后查询时候方便. 1.列表推导式: seq_list=[1,2,3,4,5] new_list=[i *2 for i in seq ...

  3. js模块化规范

    1. CommonJS 用于服务端模块化编程,比如nodejs就采用此规范: 一个文件就是一个模块,require方法用来加载模块,该方法读取一个文件并执行,最后返回文件内部的module.expor ...

  4. 通过渲染改变tabBarItem的背景图片

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #703daa } p.p2 { margin: 0.0px 0. ...

  5. Django入门实战【3步曲】

      环境准备 junhongdeMacBook-Air:site-packages junhongchen$ python -V Python 2.7.10 junhongdeMacBook-Air: ...

  6. vue2.0 如何在hash模式下实现微信分享

    最近又把vue的demo拿出来整理下,正好要做"微信分享"功能,于是遇到新的问题: 由于hash模式下,带有"#",导致微信分享的签证无效:当改成history ...

  7. 使用FormatMessage函数编写一个内核错误码查看器

    在编写驱动程序的时候,常用的一个结构是NTSTATUS,它来表示操作是否成功,但是对于失败的情况它的返回码过多,不可能记住所有的情况,应用层有一个GetLastError函数,根据这个函数的返回值可以 ...

  8. vs2008中xlslib与libxls库的编译及使用

    C++用来操作Excel的方法很多,但是涉及到跨平台,同时又要对Excel的读写操作兼顾,而且免费的库,那应该是要用xlslib和libxls了.由于技术比较菜,折腾这个折腾了一个星期了.最开始是使用 ...

  9. 学习总结:gcc/g++ 编译与链接

    gcc/g++ 编译与链接 编译与链接的过程可以分解为四个步骤:预处理.编译.汇编.链接 预处理:源代码文件和相关的头文件,被预处理器cpp预处理成一个后缀为 .i 的文件(选项:-E) 编译:把预处 ...

  10. 【整理】REACT一些自己感觉需要记的东西

    REACT生命周期: 组件的生命周期可分成三个状态: Mounting:已插入真实 DOM Updating:正在被重新渲染 Unmounting:已移出真实 DOM 生命周期的方法有: compon ...