摘录-IT企业必读的200个.NET面试题-06 .NET中的高级特性

委托

Q: 请解释委托的基本原理

委托是一类继承自System.Delegate的类型,每个委托对象至少包含了一个指向某个方法的指针,委托实现了回调方法的机制。

Q: 委托回调静态方法和实例方法的区别

当委托绑定静态方法时,内部的对象成员变量_target将会被设置为null,而当委托绑定实例方法时,_target将会设置成指向该实例方法所属类型的一个实例对象,当委托被执行时,该对象实例将被用来调用实例方法。

Q: 什么是链式委托

链式委托是指一个由委托串成的链表,当链表上的一个委托被回调时,所有链表上该委托的后续委托将会被顺序执行。

Q: 链式委托的执行顺序是怎样的

链式委托的执行顺序是:按照委托链上的顺序从当前委托开始依次往后执行。如果有需要,可以通过GetInvocationList()方法来获得委托链上所需要执行的委托,并按照希望的顺序去执行它们。

Q: 可否定义拥有返回值的方法的委托链

委托可以是带有返回值的方法,但多于一个带返回值的方法被添加到委托链中时,程序员需要手动调用委托链上的每个方法,否则委托使用者只能得到委托链上最后一个被执行方法的返回值。

Q: 委托通常可以应用在哪些场合

委托的应用场合通常是任务的执行者把细节工作进行再分配,执行者确切地知道什么工作将要被执行,但却把执行细节委托给其他组件、方法或者程序集。

事件

Q: 请解释事件的基本使用方法

事件是一种使对象或类能够提供通知的成员。客户端可以通过提供事件处理程序为相应的事件添加可执行代码。事件是一种特殊的委托。

Q: 事件和委托有何联系

事件是一个委托类型,该委托类型的方法无返回值,并且拥有两个参数:object和TEventArg。事件的订阅和取消都是基于委托链表来实现的。

Q: 如何设计一个带有很多事件的类型

当某个类型包含较多的事件时,可以考虑集中把所有事件的委托链表存储在一个集合中,这样能有效减少对象的大小,因为在实际中一个对象使用所有事件的情况很少。.NET的内建类型System.ComponentModel.EventHandlerList提供了这样一个存储事件集合的封装。

Q: 用代码表示如下情景:猫叫、老鼠逃跑、主人惊醒

下面给出一个简单的例子:

猫的定义:

public class Cat
    {
        private string _name;

        public event EventHandler<CatCryEventArgs> CatCryEvent;

        public Cat(string name)
        {
            _name = name;
        }

        public void CatCry()
        {
            CatCryEventArgs args = new CatCryEventArgs(_name);
            Console.WriteLine(args);
            CatCryEvent(this, args);
        }
    }

事件参数定义:

public class CatCryEventArgs : EventArgs
    {
        private string _catName;

        public CatCryEventArgs(string catName)
            : base()
        {
            _catName = catName;
        }

        public override string ToString()
        {
            return _catName + "叫了";
        }
    }

老鼠的定义:

public class Mouse
    {
        private string _name;

        public Mouse(string name, Cat cat)
        {
            _name = name;
            cat.CatCryEvent += cat_CatCryEvent;
        }

        void cat_CatCryEvent(object sender, CatCryEventArgs e)
        {
            Run();
        }

        private void Run()
        {
            Console.WriteLine("老鼠" + _name + "逃跑了");
        }
    }

主人的定义:

public class Master
    {
        private string _masterName;

        public Master(string name, Cat cat)
        {
            _masterName = name;
            cat.CatCryEvent += cat_CatCryEvent;
        }

        void cat_CatCryEvent(object sender, CatCryEventArgs e)
        {
            WakeUp();
        }

        private void WakeUp()
        {
            Console.WriteLine("主人" + _masterName + "醒了");
        }
    }

代码运行:

Console.WriteLine("开始模拟");
            Cat cat = new Cat("汤姆猫");
            Mouse m1 = new Mouse("老鼠1号", cat);
            Mouse m2 = new Mouse("老鼠2号", cat);
            Master master = new Master("Jack", cat);
            cat.CatCry();
            Console.ReadLine();

反射

Q: 请解释反射的基本原理和其实现的基石

反射是一种动态分析程序集、模块、类型、字段等目标对象的机制,它的实现依托于元数据。元数据是存储在PE文件中的数据块,它详细记录了程序集或模块内部的结构、引用类型、程序集和清单。

Q: .NET提供了哪些类型来实现反射

在System.Reflection命名空间下,.NET提供了丰富的实现反射机制的类型。

Q: 如何实现动态地发射程序集

在System.Reflection.Emit命名空间下,定义了一系列用于动态发射中间代码的类型,这些类型可以用来实现动态创建程序集的功能。生成的中间代码被直接写入内存中,而不是以代码的形式驻留在硬盘中。

Q: 如何利用反射来实现工厂模式

使用反射可以实现灵活性较高的工厂模式,其关键在于动态查找产品所包含的所有零件,而不是需要通过代码来逐一分析使用者的需求。反射工厂模式具有灵活性较高、运行效率较低的特点。

Q: 如何以较小的内存代价保存Type、Field和Method信息

System.RuntimeTypeHandle、System.RuntimeMethodHandle和System.RuntimeFieldHandle三个类型分别包含了一个指向类型、方法和字段描述的指针,用保存指针的方式来代替保存整个类型、方法和字段的信息描述对象,可以有效减少内存的消耗。

特性

Q: 什么是特性,如何自定义一个特性

特性是一种特殊的用以声明式编程的机制,特性类型是一族继承自System.Attribute的类型,在编译时,特性的使用会被写入元数据中,以供运行或者程序中的反射使用。

Q: .NET中特性可以在哪些元素上使用

通过AttributeUsage特性可以限制自定义特性的适用范围

Q: 有哪几种方法可以获知一个元素是否申明某个特性

时间: 2025-01-04 18:21:37

摘录-IT企业必读的200个.NET面试题-06 .NET中的高级特性的相关文章

摘录-IT企业必读的200个.NET面试题-09 .NET中的数据库开发

ADO.NET和数据库的连接 Q: 请简要叙述数据库连接池的机制 数据库连接池就是一个存储数据库连接的缓冲池.ADO.NET对上层用户提供了数据库连接池的服务,使用完的数据库连接将被有选择地保持在数据库连接池中,以供下次使用.当用户以某个连接字符串申请数据库连接时,数据库连接池将尝试在池中寻找具有相同连接字符串的连接,并直接提供给用户. Q: 如何提高连接池内连接的重用率 为了提高数据库连接池的重用率,唯一的方法就是尽量保证系统访问数据库所使用的连接字符串不变.例如统一使用超级用户账户可以进一步

摘录-IT企业必读的200个.NET面试题-04 字符串、集合和流的使用

字符串处理 Q: System.String是值类型还是引用类型 System.String是引用类型,它的对象在初始化之后就不能再做修改,任何试图修改字符串对象的动作将导致一个新的字符串对象生成. Q: 如何在string和Byte[]对象之间进行转换 字符串和字节数组的转换依赖于编码方式的使用,不同的编码标准将使用不同的算法进行.System.Text.Encoding类型提供了大部分常见编码算法支持,用以进行字符串和字节数组之间的转换.下面是代码例子: class Program { st

摘录-IT企业必读的200个.NET面试题-11 Web Service的开发与应用

SOAP和Web Service的基础概念 Q: 请简述SOAP协议 SOAP协议全称是简单对象访问协议(Simple Object Access Protocol),SOAP致力于以XML形式提供一个简单.轻量的用于分散或分布环境中交换结构化和类型信息的机制.SOAP规范由四部分组成:SOAP信封.SOAP编码规则.SOAP RPC表示.SOAP绑定. Q: 什么是WSDL,它有何作用 WSDL是Web服务描述语言,是一种符合XML语法规范的语言,用以描述服务器端提供的Web Service方

摘录-IT企业必读的200个.NET面试题-10 XML的应用和处理

XML的基本特性 Q: 什么是XML XML就是可扩展标记语言,XML是一种简单的数据存储语言. Q: 简述XML的常用领域及其优势 XML具有内容和结构分离.互操作性强.规范统一.支持多种编码格式等特点,正是因为这些优点,XML已经被应用在数据交换.Web Service.电子商务.配置文件等多种领域. Q: XML中的命名空间如何使用 命名空间被用来模块化XML文档中的元素,当解析器试图读取特定命名空间下的节点时,需要指定命名空间的名称. 使用.NET组件读写XML Q: .NET中操作XM

摘录-IT企业必读的200个.NET面试题-07 .NET多线程编程

多线程的基本概念 Q: 请解释操作系统层面上的线程和进程 进程代表了一个正在运行的应用程序的实体,而一个进程中可包含1个或多个线程. Q: 多线程程序在操作系统里是并行执行的吗 在单CPU的计算机架构上,任何时候只可能存在一个运行的线程,操作系统通过快速的调度轮换使使用者感觉到多线程在同时执行.而在多CPU的架构上,则可能存在完全并行的线程. Q: 什么是纤程 纤程是微软公司提出的轻量级线程的概念,一个纤程拥有自己的栈和寄存器状态.一个线程可以包含多个纤程,和线程由操作系统调度有所不同的是,线程

摘录-IT企业必读的200个.NET面试题-05 常用类和接口

类型的基类System.Object Q: 是否存在不继承自System.Object的类 通过运用ILasm.exe的noautoinherit开关,可以生成不从System.Object继承的类型,这种类型不是安全的类型,不建议使用.但是,因为有这种机制的存在,所以程序员在编写代码时不能随意地把任何对象默认看成System.Object的子类型. Q: 在System.Object中定义的三个比较方法有何异同 静态方法ReferenceEquals实现了引用比较.静态Equals方法实现了比

摘录-IT企业必读的200个.NET面试题-02 .NET框架基础

.NET基础概念 什么是CTS.CLS和CLR CTS是通用类型系统:CLS是公共语言规范:CLR是公共语言运行时. CLR技术和COM技术的比较 CLR和COM都定义了组件间交互的规范.COM并没有定义如何描述组件间的依赖性,并且由于其严格的物理约定,造成了很多组件版本升级和控制的问题.CLR运用元数据和逻辑类型定义等机制,有效地解决了COM遗留的一些问题.并且,相较于COM模型,笔者认为CLR更容易理解和学习. 什么是程序集和应用程序域 程序集是一个由类型定义.数据文件和资源文件组成的逻辑集

摘录-IT企业必读的200个.NET面试题-03 .NET类型语法基础

基础类型和语法 Q: System.Object中包含哪些方法,哪些是虚方法 System.Object包含了Finalize在内的8个方法,其中有3个虚方法:Equals.GetHashCode和ToString方法. Q: 值类型和引用类型的区别 所有的值类型都继承自System.ValueType,常用的值类型包括结构.枚举.整数型.浮点型.布尔型等.值类型的赋值会产生一个新的数据副本,所以每个值类型都拥有一个数据副本,而引用类型的赋值则是赋值引用.值类型的对象分配在堆栈上,而引用类型的对

http://url.cn/TgrIZT 小伙伴们,北风网200元学习卡免费限量领取中...

http://url.cn/TgrIZT  小伙伴们,北风网200元学习卡免费限量领取中... 朋友推荐,是真的,以前在这买过一次教程,真的特别好,有基本的知识教程,还有项目视频教程,我刚开始以为只是单纯的视频,谁知道和培训机构一样,老师现场解答,不仅如此,老师还24小时给你解答问题,真的特别好,对于刚刚毕业的我来说,学到了很多的知识,真的特别感谢北风网,感谢北风网曾经交过我的每一位老师,谢谢你们,我会努力,让他们看到我们的北风网是如此的好,谢谢博客园这个平台.只需要花培训机构10%的钱,学到的