2014-01-10 108 views
1

我有一个我想要构造的类,通过从网络流反序列化它。在构造函数中使用'this'

public Anfrage(byte[] dis) 
    { 
     XmlSerializer deser = new XmlSerializer(typeof(Anfrage)); 
     Stream str = new MemoryStream(); 
     str.Write(dis, 0, dis.Length); 
     this = (Anfrage)deser.Deserialize(str); 
    } 

的意图是,我只是想通过字节[]和具有适当的对象,而不是在另一个类中使用的方法。
现在,我知道我明显不能这样做this =。 我读过this question,目前正在阅读其中提到的文章,但我不确定我是否正确理解它。

我的意图明确吗?

有没有办法做我想在这里完成的事情?

谢谢大家。

+1

您可以分配到'this'在构造函数值类型。不过,它可能没有你期望的效果。 –

回答

12

通过分配this,您不能覆盖类中的对象。

例如,您可以创建回报一个新实例的方法:

public static Anfrage Create(byte[] dis) 
{ 
    XmlSerializer deser = new XmlSerializer(typeof(Anfrage)); 
    Stream str = new MemoryStream(); 
    str.Write(dis, 0, dis.Length); 
    return (Anfrage)deser.Deserialize(str); 
} 

然后你就可以实例化一个像这样的:

var anfrage = Anfrage.Create(bytes); 
+0

所以没有办法创建一个构造函数,如 'Anfrage whatev = new Anfrage(byteArrayFromSerialization)'? – Mark

+3

是的,你可以,但你必须做一些像'temp = Deserialize()',然后将所有值从'temp'复制到'this'中。你不想那样。 – CodeCaster

+0

确实。看起来像不好的做法和解决方法。谢谢! – Mark

3
这个问题

通常是处理静态非构造函数返回Object。

public static Anfrage Create(byte[] dis) 
{ 
    XmlSerializer deser = new XmlSerializer(typeof(Anfrage)); 
    Stream str = new MemoryStream(); 
    str.Write(dis, 0, dis.Length); 
    return (Anfrage)deser.Deserialize(str); 
} 

,如果你想有一个新的对象,并对其进行编辑,使构造私人而不是公众和你存取权限是静态的建筑功能

+2

你是认真的,还是只是一个缓慢的typer? ;-) – CodeCaster

+1

对不起,我点击了Anwer并编写了代码......我总是看到,我的回答已经是由另一个人编写的,提交之后: –

相关问题