Konstruktor jest zawsze wywoływany. Zazwyczaj mam dwa konstruktory. Jeden dla serializacji (domyślny konstruktor) i jeden dla wszystkich „regularnej” Kod:
[DataContract]
public class Component
{
// for JSON.NET
protected Component()
{
}
public Component(allMandatoryFieldsHere)
{
// I'm doing some magic here.
}
}
W ten sposób można również upewnić się, że dev podać wszystkie informacje, które są wymagane.
Nie polecam jednak używania niczego poza DTO podczas przesyłania informacji, ponieważ w przeciwnym razie można obejść hermetyzację obiektów (każdy może zainicjować dowolne pole dowolną wartością). Dobrze. Jeśli używasz tylko modeli anemicznych.
jest w związku z tym brzydkim rozwiązaniem, ponieważ nikt nie może powiedzieć, że tworzysz wszystkie obiekty w niezainicjowany sposób. Inicjalizacja konstruktora jest nie bez powodu. Lepiej, aby klasy mogły stwierdzić, że nie można wywoływać prawdziwego konstruktora, dostarczając konstruktora "serializacji", jak sugerowałem.
Niemożliwe AFAIK. Konstruktor jest zawsze wykonywany podczas tworzenia instancji. – Maarten
@Maarten http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatterservices.getsafeuninitializedobject.aspx –
Thanx! Nauczyłem się czegoś dzisiaj :-) – Maarten