.NET面试——技术之谈之续

1、 ASP.NET MVC中 ViewBag、ViewData、TempData的区别?    ViewBag:生命周期和View相同,仅对当前View有效。ViewBag的类型不再是字典的键值对结构,而是动态(dynamic)类型,在ViewPage中查询数据时不需要类型转换,属于MVC3.0中新增的部分。
    ViewData:生命周期和View相同,仅对当前View有效。传统的键值对结构,存取速度要比ViewBag快。
    TempData:保存在Session中,Controller每次执行请求的时候,会从Session中先获取TempData,而后清除 Session,获取完TempData数据,虽然保存在内部字典对象中,但是其集合中的每个条目访问一次后就从字典表中删除。
    2、什么是强类型、弱类型,它们的区别?
    强类型:每个变量和对象都必须具有声明类型,强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,强类型安全,而且效率高。弱类型相比而言不安全。
    弱类型:比如JavaScript中的var类型,可以存储各种类型的数据。弱类型在执行的时候才会确定类型。
    一直说C#是强类型语言,通俗地讲,便是指C#中的“变量”在开发时的类型便是明确的:String便是String,Int32就是Int32,毫无争议。强类型的好处有:
    (1)、能够享受代码提示功能;
    (2)、能够获得重构工具的支持;
    (3)、能够在编译期发现更多错误。
    3、泛型的好处?
    对泛型的理解:泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写体验泛型代码时定义一些可变部分,那些部分在使用前必须作出指明。各 种程序设计语言和其编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型类是引用类型,是堆对 象,主要是引入了类型参数这个概念。
    泛型的有点:
    (1)、高性能:没有泛型的时候,所有的对象都是以object为基础,如果要使用时必须进行强制类型转换,如果对于值类型,则会导致不断拆箱装箱的过程,对系统资源消耗很大。
    (2)、类型安全:类型安全在于提前避免异常的出现,程序直接编译不通过。
    (3)、代码的重用与扩展:
    publicclassProduct<T>
    {
    publicvoid Description(T t)
    {
    Type type = t.GetType();
    foreach (PropertyInfo property in type.GetProperties())
    {
    if (property.Name.Equals("Name"))
    {
    Console.WriteLine("我是{0}品牌!", property.GetValue(t,null));
    Console.ReadKey();
    }
    }
    }
    }
    注:这里的T只是一个标识而已,定义成任何字符都可以。
    4、装箱与拆箱?(这个应该简单,想必大伙儿都知道)
    装箱就是隐式的将一个值型转换为引用型对象。比如:
    int i=0;
    System.Object obj=i;
    这个过程就是装箱,就是将i装箱。
    拆箱就是将一个引用型对象转换成任意值型。比如:
    int i=0;
    System.Object obj=i;
    int j=(int)obj;
    这个过程前2句是将i装箱,后一句是将obj拆箱。