Windows Mobile 开发面试题
号一样。
12.C#为什么不能用类进行多重继承,它用什么代替了?
答:C#中是没有类的多重继承这个概念.要使用多重继承必须要通过接口Interface来完成。
13.类和结构有什么不同和相同点?
(1)、类:
对象是什么﹐对象就是这个世界的全部﹐人﹑植物﹑星体等等
类是什么﹐类是对对象的一个抽象﹐把有共同特征行为的对象抽象在一起就是类﹐目的是为了更好的运做管理这些对象
对象是类的一个实例。
(2)、结构: 可以把它看做是轻量级别的类 区别:
a)、结构是值类型(值类型在栈上分配地址)﹐类是引用类型(引用类型在堆上分配地址) 堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑
b)、结构不能继承(虽然结构没有明确的用sealed声明,可是结构是隐式的sealed.) 类除非显示的声明sealed否则类可以继承其他类和接口,自身也能被继承
c)、内部结构: 结构:
没有默认的构造函数,但是可以添加构造函数 没有析构函数
没有abstract和sealed(因为不能继承) 不能有protected修饰符 可以不使用new初始化
在结构中初始化实例字段是错误的
类:
有默认的构造函数 有析构函数
可以使用abstract和sealed 有protected修饰符 必须使用new初始化
14.什么是反射,请举例说明?
答: 程序集(Assembly)包含模块(Module),而模块包含类型(Class),类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将
Windows Mobile 开发面试题
类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。反射通常具有以下用途:
(1)、使用 Assembly 定义和加载程序集,加载在程序集清单中列出的模块,以及从此程序集中查找类型并创建该类型的实例。
(2)、使用 Module 了解如下的类似信息:包含模块的程序集以及模块中的类等。您还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。
(3)、使用 ConstructorInfo 了解如下的类似信息:构造函数的名称、参数、访问修饰符(如 public 或 private)和实现详细信息(如 abstract 或 virtual)等。使用 Type 的 GetConstructors 或 GetConstructor 方法来调用特定的构造函数。
(4)、使用 MethodInfo 来了解如下的类似信息:方法的名称、返回类型、参数、访问修饰符(如 public 或 private)和实现详细信息(如 abstract 或 virtual)等。使用 Type 的 GetMethods 或 GetMethod 方法来调用特定的方法。 (5)、使用 FieldInfo 来了解如下的类似信息:字段的名称、访问修饰符(如 public 或 private)和实现详细信息(如 static)等;并获取或设置字段值。 (6)、使用 EventInfo 来了解如下的类似信息:事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等;并添加或移除事件处理程序。
(7)、使用 PropertyInfo 来了解如下的类似信息:属性的名称、数据类型、声明类型、反射类型和只读或可写状态等;并获取或设置属性值。
(8)、使用 ParameterInfo 来了解如下的类似信息:参数的名称、数据类型、参数是输入参数还是输出参数,以及参数在方法签名中的位置等。
15.在.NET中什么类不能被继承?
答:在类声明中使用sealed(密封类)可防止其它类继承此类;在方法声明中使用sealed修饰符可防止扩充类重写override此方法。
16、
NET序列化和反序列化基础知识总结
.NET序列化和反序列化的基础学习需要明白和掌握什么基础知识呢?下面我们就.NET序列化和反序列化的概念、存在的必要性以及简单的实现方面向你介绍.NET序列化和反序列化的相关内容。
.NET序列化和反序列化的学习中都会涉及到什么概念呢?在我们学习之前其实还是要明白问什么会有.NET序列化,它存在的必要性是什么?是如何实现的呢?那么下面我们逐一介绍
.NET序列化的概念:
Windows Mobile 开发面试题
“序列化”可被定义为将对象的状态存储到存储媒介中的过程。在此过程中,对象的公共字段和私有字段以及类的名称(包括包含该类的程序集)都被转换为字节流,然后写入数据流。在以后“反序列化”该对象时,创建原始对象的精确复本。
一、.NET序列化和反序列化的必要性
1、将对象的状态保持在存储媒体中,以便可以在以后重新创建精确的副本; 2、通过值将对象从一个应用程序域发送到另一个应用程序域中。
例如,序列化可用于在 ASP.NET 中保存会话状态并将对象复制到 Windows 窗体的剪贴板中。远程处理还可以使用序列化通过值将对象从一个应用程序域传递到另一个应用程序域中。
二、如何实现.NET序列化和反序列化
1、要实现对象的序列化,首先要保证该对象可以序列化。而且,序列化只是将对象的属性进行有效的保存,对于对象的一些方法则无法实现序列化的。实现一个类可序列化的最简便的方法就是增加Serializable属性标记类。如:
1. [Serializable()] 2. public class MEABlock 3. {
4. private int m_ID; 5. public string Caption; 6.
7. public MEABlock() 8. {
9. ///构造函数 10. } 11. }
即可实现该类的可序列化。
2、要将该类的实例序列化为到文件中?.NET FrameWork提供了两种方法: (1)XML序列化
使用 XmLSerializer 类,可将下列项序列化。 ◆公共类的公共读/写属性和字段
◆实现 ICollection 或 IEnumerable 的类。(注意只有集合会被序列化,而公共属性却不会。)
Windows Mobile 开发面试题
◆XmlElement 对象。 ◆XmlNode 对象。 ◆DataSet 对象。
要实现上述类的实例的序列化,可参照如下例子:
12. MEABlock myBlock = new MEABlock();
13. // Insert code to set properties and fields of the object.
14. XmlSerializer mySerializer = new XmlSerializer(typeof(MEABlock)); 15. // To write to a file, create a StreamWriter object.
16. StreamWriter myWriter = new StreamWriter(\); 17. mySerializer.Serialize(myWriter, MEABlock);
需要注意的是XML序列化只会将public的字段保存,对于私有字段不予于保存。生成的XML文件格式如下:
18.
19.
对于对象的反序列化,则如下:
21. MEABlock myBlock;
22. // Constructs an instance of the XmlSerializer with the type 23. // of object that is being deserialized.
24. XmlSerializer mySerializer = new XmlSerializer(typeof(MEABlock)); 25. // To read the file, creates a FileStream.
26. FileStream myFileStream = new FileStream(\, FileMode.Op
en);
27. // Calls the Deserialize method and casts to the object type. 28. myBlock = (MEABlock)mySerializer.Deserialize(myFileStream)
(2)二进制序列化
与XML序列化不同的是,二进制序列化可以将类的实例中所有字段(包括私有和公有)都进行序列化操作。这就更方便、更准确的还原了对象的副本。 要实现上述类的实例的序列化,可参照如下例子:
29. MEABlock myBlock = new MEABlock();
30. // Insert code to set properties and fields of the object. 31. IFormatter formatter = new BinaryFormatter(); 32. Stream stream = new FileStream(