C# 使用';这';在构造函数中

C# 使用';这';在构造函数中,c#,constructor,C#,Constructor,我想通过从网络流反序列化来构造一个类 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);

我想通过从网络流反序列化来构造一个类

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);
    }
其目的是我只想传递byte[]并拥有一个适当的对象,而不是在另一个类中使用方法。
现在,我知道我显然不能做这件事。 我已经读过,现在正在读其中提到的文章,但我不确定我是否正确理解了它

我的意图够清楚吗

有什么方法可以完成我想在这里完成的事情吗


谢谢大家。

您不能通过分配给
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);

不能通过指定给
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);

通常,处理这个问题的是返回对象的静态非构造函数

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);
}

如果您想拥有一个新对象并对其进行编辑,请将构造函数设置为私有而不是公共,并使用静态构造函数访问它

通常,此问题由返回该对象的静态非构造函数处理

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);
}

如果您想拥有一个新对象并对其进行编辑,请将构造函数设置为私有而不是公共,并使用静态构造函数访问它

您可以在值类型的构造函数中分配给此。但是,它可能没有您期望的效果。您可以在值类型的构造函数中指定给
this
。但是,它可能没有你期望的效果。因此,没有办法创建一个像
Anfrage whatev=newanfrage(byteArrayFromSerialization)
这样的构造函数?是的,你可以,但是你必须做一些类似
temp=Deserialize()
的事情,然后将
temp
中的所有值复制到
this
中。你不想这样。所以没有办法创建一个像
Anfrage whatev=newanfrage(byteArrayFromSerialization)
这样的构造函数?是的,你可以,但是你必须做一些类似
temp=Deserialize()
的事情,然后将
temp
中的所有值复制到
这个
中。你不会想要的。你是认真的,还是只是个打字慢的人?;-)抱歉,我点击了Anwer并编写了代码。。。我总是看到,我的答案已经是另一个人在提交后写的:(你是认真的,还是打字慢?;-)对不起,我点击了Anwer并写了代码。。。我总是看到,我的答案已经是另一个人在提交后写的:(