为什么每个类都要有一个子类调用父类构造函数数

&&&&&&&&&&&
刚才用xml序列化器,序列化一个类,结果报错说序列化的类必须带有一个无参的构造函数,好奇怪啊。为什么要有这么苛刻的条件,而且xml序列化还要求序列化的成员是public。
我以前一直觉得序列化器是一个很神奇的东西,因为它可以把一个对象保存在一个文件中,然后可以通过反序列化将文本文件还原成对象,觉得用起来很方便,而忘了思考它是怎样实现的。
先上一个例子:
[Serializable]
public class Persons:List&Person&
public void SaveData(string path)
using (FileStream fs = new FileStream(path, FileMode.Create))
XmlSerializer formatter = new XmlSerializer(typeof(Persons));
formatter.Serialize(fs, this);
public static Persons LoadDataFromFile(string path)
using (FileStream fs = new FileStream(path, FileMode.Open))
XmlSerializer formatter = new XmlSerializer(typeof(Persons));
sc = (Persons)formatter.Deserialize(fs);
  Person类:
[Serializable]
public class Person
public string Name { }
public int Age { }
public Person(string name)
public Person()
Name = string.E
现在想来,如果是由我来实现一个类型通用的序列化器,真是必须要有一个无参构造函数。为什么?
先回答我一个问题:
序列化器的序列化的是类的哪些成员? 答:字段,属性,一切的方法都不会参与序列化过程
有了这点就够了,我们知道类型的方法一旦经过编译就不能修改,方法的实现已经写在程序集里面了,所以我们没有必要把它序列化出来,这样只会多此一举,而且还浪费空间。我们可以将序列化的过程看成是先创建一个对象,然后再对对象里面的成员进行赋值(这就是为什么要被xml序列化的成员是publilc,public说明成员可以在类的外部进行赋值,对象一旦被创建就会为它分配空间)。
由于编译器是很笨的,他不会自动识别构造函数的参数,所以这里就需要一个无参数的构造函数来新建一个类,这样就能保证类型总能成功新建对象。(试想一下Perso对象是null你能对它的成员赋值吗?)
我认为反序列化的部分过程应该是这样
Person p=new Person();//这里必须遵守序列化的对象都带有一个无参构造函数,保证对象非null
//此处省略若干处理代码
p.Name="John";
调用无参构造函数生成一个Person类,然后通过一系列的对xml的处理解析得知Person类中有两个字段属性 然后对这两个字段属性赋值
至此一个Person就被成功反序列化出来,以上纯属个人观点,如果你觉得不对请指出。
阅读(...) 评论()为什么会出现没有构造函数的类呢?解决方案 - C#当前位置:& &&&为什么会出现没有构造函数的类呢?解决方案为什么会出现没有构造函数的类呢?解决方案&&网友分享于:&&浏览:135次为什么会出现没有构造函数的类呢????C#中的Graphics 类在使用中出现如下错误:类型“System.Drawing.Graphics”未定义构造函数 我很奇怪,怎么会有没有构造函数的类呢?即使不定义,不是都有默认的构造函数吗?哪位大侠给解释一下啊!------解决方案--------------------Graphics 封装一个 GDI+ 绘图图面。无法继承此类。Graphics _Graphics =Graphics.FromImage
FormFromHwnd 很多 一般这两个比较长用.
------解决方案--------------------你要继承这个类?这个类定义如下:public sealed class Graphics : MarshalByRefObject, IDeviceContext, IDisposable
------解决方案--------------------Graphics的构造函数是私有的,本意就是不让直接构造。只能通过类似Graphics.FromImage()等静态函数来得到一个实例。
------解决方案--------------------绘图函数么,假如你能随便构造,请问,你是往那里绘制呢?参见/zh-cn/library/system.drawing.graphics.aspxGraphics 类封装一个 GDI+ 绘图图面。无法继承此类。Graphics 类提供将对象绘制到显示设备的方法。Graphics 与特定的设备上下文关联。通过调用从 System.Windows.Forms.Control 继承的对象上的 Control.CreateGraphics 方法,或通过处理控件的 Control.Paint 事件并访问 System.Windows.Forms.PaintEventArgs 类的 Graphics 属性,可以获取 Graphics 对象。也可以使用 FromImage 方法从图像创建 Graphics 对象。有关创建 Graphics 对象的更多信息,请参见如何:创建用于绘制的 Graphics 对象。可以使用 Graphics 对象绘制许多不同的形状和线条。有关如何绘制线条和形状的更多信息,请参见针对要绘制的线条或形状的特定 DrawGraphicalElement 方法。这些方法包括 DrawLine、DrawArc、DrawClosedCurve、DrawPolygon 和 DrawRectangle。有关如何绘制线条和形状的更多信息,请参见使用钢笔绘制线条和形状和使用画笔填充形状。还可以分别使用 DrawImage 和 DrawIcon 方法来绘制图像和图标。有关如何使用 Graphics 对象绘制图像的更多信息,请参见使用图像、位图、图标和图元文件。
------解决方案--------------------Graphics 类封装一个 GDI+ 绘图图面。无法继承此类。Graphics g = button1.CreateGraphics();
//画一个椭圆
g.DrawEllipse(Pens.Red,5,5,button1.Width-10,button1.Height-10);
g.Dispose();
------解决方案--------------------构造函数是私有或是保护继承的.
------解决方案--------------------搂主说得没错,每个对象都有构造函数的,不然该对象是无法被操作系统实例化并管理的。只不过Graphics对象的构造函数是私有的,或者是内部的,我们是无法主动实例化的,也是不让我们继承的。它的方法Graphics.From....会自动调用内部构造函数实例化的
------解决方案--------------------GDI
关联 设备DC在显存中最好为只读,如果你有能力修改显存那么显示就不会稳定。在微软大多数方案中是采用资源句柄的方式。你有一个操作显示的handle。net继承了这一想法,私有构造,对外提供一个handle,直接封在方法中了!
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有(A)每个类都有一个无参构造函数 (B)每个类都有一个拷贝构造函数;看看这两个选项是不是正确的?-中国学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业,汽车等信息
> 信息中心 >
(A)每个类都有一个无参构造函数 (B)每个类都有一个拷贝构造函数;看看这两个选项是不是正确的?
来源:互联网 发表时间: 17:30:16 责任编辑:王亮字体:
为了帮助网友解决“(A)每个类都有一个无参构造函数 (B)每个类都有一个拷贝构造函数;看看这两个选项是不是正确的?”相关的问题,中国学网通过互联网对“(A)每个类都有一个无参构造函数 (B)每个类都有一个拷贝构造函数;看看这两个选项是不是正确的?”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:(A)每个类都有一个无参构造函数 (B)每个类都有一个拷贝构造函数;看看这两个选项是不是正确的?,具体解决方案如下:解决方案1:
即便自己不定义类中至少有一个构造函数,那么该类中是没有无参构造函数的,如果不显式定义无参构造函数、一个析构函数。这三个函数。但是当定义有参数的构造函数时,编译器也会自动生成、一个复制构造函数
解决方案2:
拷贝函数。2、正确、析构函数、C++类四个默认函数---构造函数1
1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答
相关文章:
<a href="/cse/search?q=<inputclass="s-btn"type="submit"text="<inputclass="s-btn"type="submit"text="<buttonhidefocusclass="s-btnjs-ask-btn"text="我要提问
<a href="/cse/search?q=

我要回帖

更多关于 类的构造函数 的文章

 

随机推荐