ASP.NET面试题三题

Dream_Hunter_ 2009-07-23 07:55:29
App_Themes文件夹作用?里面放什么文件?如何正确使用?可否放css文件?

实体类一般写法,都继承自Datatable有什么好处?为何使用Serializable()(具体说明)?

父类P中有方法A(M mm)
继承自该父类的子类Q方法A(N nn)
其中,N和M都是类,且N继承自M
那么,Q中的方法A是对P中的方法A重写还是重载?
当调用Q中的方法A时,是否会调用P中的方法A?
...全文
288 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsd123 2009-09-08
  • 打赏
  • 举报
回复
.
liaoyukun111 2009-07-25
  • 打赏
  • 举报
回复
学习下
龙火 2009-07-25
  • 打赏
  • 举报
回复
学习,关注
willonboy 2009-07-24
  • 打赏
  • 举报
回复
回帖是一种美德,传说每天回帖可以得到十分的可用分!
kira155716 2009-07-24
  • 打赏
  • 举报
回复
2,3楼已经答得很清楚了
不再重复
snksxsyy 2009-07-24
  • 打赏
  • 举报
回复
mark
CeleryZeng 2009-07-24
  • 打赏
  • 举报
回复
很强的人们
Jack_Senlan 2009-07-24
  • 打赏
  • 举报
回复

不错,学习了
  • 打赏
  • 举报
回复
知道1 3

对于 第二个 Serializable() 只知道是序列化的不知道怎么用
wl_bdqn 2009-07-24
  • 打赏
  • 举报
回复
学习
robin521 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bwangel 的回复:]
App_Themes文件夹作用?里面放什么文件?如何正确使用?可否放css文件?
是用于存放样式的文件夹,里面放*.skin皮肤文件,当然可以放css文件和其他东东,css会被默认引用.
实体类一般写法,都继承自Datatable有什么好处?为何使用Serializable()(具体说明)?
参考petshop4.0的Model写法,都继承自Datatable没什么好处.  Serializable序列化以后才能用它进行数据交换.具体说明就免了.

父类P中有方法A(M mm)
继承自该父类的子类Q方法A(N nn)
其中,N和M都是类,且N继承自M
那么,Q中的方法A是对P中的方法A重写还是重载? : 即不是重写也不是重载,而是子类的A隐藏了父类的A.
当调用Q中的方法A时,是否会调用P中的方法A?:不会,它们的方法签名都不同,何来调用?
[/Quote]

这是正解! A(M mm)也有可能是一个虚方法,在面向接口编程的思路里通常会这么做,子类的方法复写或重载都有可能.
devilidea 2009-07-24
  • 打赏
  • 举报
回复
Serializable在C#中的作用.NET 中的对象序列化

简介
序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。

在面向对象的环境中实现序列化机制时,必须在易用性和灵活性之间进行一些权衡。只要您对此过程有足够的控制能力,就可以使该过程在很大程度上自动进行。例如,简单的二进制序列化不能满足需要,或者,由于特定原因需要确定类中那些字段需要序列化。以下各部分将探讨 .NET 框架提供的可靠的序列化机制,并着重介绍使您可以根据需要自定义序列化过程的一些重要功能。

持久存储
我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据。尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂。可以想象一下编写包含大量对象的大型业务应用程序的情形,程序员不得不为每一个对象编写代码,以便将字段和属性保存至磁盘以及从磁盘还原这些字段和属性。序列化提供了轻松实现这个目标的快捷方法。

公共语言运行时 (CLR) 管理对象在内存中的分布,.NET 框架则通过使用反射提供自动的序列化机制。对象序列化后,类的名称、程序集以及类实例的所有数据成员均被写入存储媒体中。对象通常用成员变量来存储对其他实例的引用。类序列化后,序列化引擎将跟踪所有已序列化的引用对象,以确保同一对象不被序列化多次。.NET 框架所提供的序列化体系结构可以自动正确处理对象图表和循环引用。对对象图表的唯一要求是,由正在进行序列化的对象所引用的所有对象都必须标记为 Serializable(请参阅基本序列化)。否则,当序列化程序试图序列化未标记的对象时将会出现异常。

当反序列化已序列化的类时,将重新创建该类,并自动还原所有数据成员的值。

按值封送
对象仅在创建对象的应用程序域中有效。除非对象是从 MarshalByRefObject 派生得到或标记为 Serializable,否则,任何将对象作为参数传递或将其作为结果返回的尝试都将失败。如果对象标记为 Serializable,则该对象将被自动序列化,并从一个应用程序域传输至另一个应用程序域,然后进行反序列化,从而在第二个应用程序域中产生出该对象的一个精确副本。此过程通常称为按值封送。

如果对象是从 MarshalByRefObject 派生得到,则从一个应用程序域传递至另一个应用程序域的是对象引用,而不是对象本身。也可以将从 MarshalByRefObject 派生得到的对象标记为 Serializable。远程使用此对象时,负责进行序列化并已预先配置为 SurrogateSelector 的格式化程序将控制序列化过程,并用一个代理替换所有从 MarshalByRefObject 派生得到的对象。如果没有预先配置为 SurrogateSelector,序列化体系结构将遵从下面的标准序列化规则(请参阅序列化过程的步骤)。

基本序列化
要使一个类可序列化,最简单的方法是使用 Serializable 属性对它进行标记,如下所示:

[Serializable]
public class MyObject ...{
public int n1 = 0;
public int n2 = 0;
public String str = null;
}
以下代码片段说明了如何将此类的一个实例序列化为一个文件:

MyObject obj = new MyObject();
obj.n1 = 1;
obj.n2 = 24;
obj.str = "一些字符串";
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Create,
FileAccess.Write, FileShare.None);
formatter.Serialize(stream, obj);
stream.Close();
本例使用二进制格式化程序进行序列化。您只需创建一个要使用的流和格式化程序的实例,然后调用格式化程序的 Serialize 方法。流和要序列化的对象实例作为参数提供给此调用。类中的所有成员变量(甚至标记为 private 的变量)都将被序列化,但这一点在本例中未明确体现出来。在这一点上,二进制序列化不同于只序列化公共字段的 XML 序列化程序。

将对象还原到它以前的状态也非常容易。首先,创建格式化程序和流以进行读取,然后让格式化程序对对象进行反序列化。以下代码片段说明了如何进行此操作。

IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Open,
FileAccess.Read, FileShare.Read);
MyObject obj = (MyObject) formatter.Deserialize(fromStream);
stream.Close();

// 下面是证明
Console.WriteLine("n1: {0}", obj.n1);
Console.WriteLine("n2: {0}", obj.n2);
Console.WriteLine("str: {0}", obj.str);
上面所使用的 BinaryFormatter 效率很高,能生成非常紧凑的字节流。所有使用此格式化程序序列化的对象也可使用它进行反序列化,对于序列化将在 .NET 平台上进行反序列化的对象,此格式化程序无疑是一个理想工具。需要注意的是,对对象进行反序列化时并不调用构造函数。对反序列化添加这项约束,是出于性能方面的考虑。但是,这违反了对象编写者通常采用的一些运行时约定,因此,开发人员在将对象标记为可序列化时,应确保考虑了这一特殊约定。
devilidea 2009-07-24
  • 打赏
  • 举报
回复
我日哦垃圾
clever_yang 2009-07-24
  • 打赏
  • 举报
回复
UP....
nandou1989 2009-07-24
  • 打赏
  • 举报
回复
重新认识一下理论,呵呵。
ilovey4 2009-07-24
  • 打赏
  • 举报
回复
学习了 除了最后一个懂点 其他两个竟然毫无所知 汗颜
caicai1983 2009-07-24
  • 打赏
  • 举报
回复
知道有这回事了
但实际中还是不知道怎么用
什么时候有个好例子看看就好咯
ftm601 2009-07-23
  • 打赏
  • 举报
回复
本人初学者!学习中!
jasondct 2009-07-23
  • 打赏
  • 举报
回复
梦哥 都回答了。我就不弄斧
qiu543999120 2009-07-23
  • 打赏
  • 举报
回复
学习下~
加载更多回复(5)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧