2014-01-10 104 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並編寫了代碼......我總是看到,我的回答已經是由另一個人編寫的,提交之後: –

相關問題