在构造函数中使用'this'

时间:2014-01-10 13:14:53

标签: 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);
    }

目的是我只想传递byte []并拥有一个合适的对象,而不是使用另一个类中的方法。
现在,我知道我显然不能做 this = 。 我已阅读this question,目前正在阅读其中提到的文章,但我不确定我是否正确理解它。

我的意图是否足够明确?

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

谢谢大家。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);
}

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