Ciò è necessario per scenari come servizi remoti, la serializzazione, materializzazione, ecc Si consiglia di non usare ciecamente, ma notare che queste strutture hanno sempre stata disponibile in qualsiasi sistema (in sostanza, affrontando direttamente la memoria) . La reflection lo formalizza semplicemente e pone i controlli e gli assegni nel modo che non vedi perché presumibilmente stai correndo in "piena fiducia", quindi sei già più forte del sistema che viene protetto.
Se si prova questo in parziale fiducia, si vedrà molto più controllo sullo stato interno.
È un anti-pattern?
Solo se il codice viene utilizzato in modo inappropriato. Ad esempio, si consideri quanto segue (valido per un WCF Data-contratto):
[DataMember]
private int foo;
public int Foo { get {return foo;} set {foo = value;} }
E 'corretto per WCF a sostegno di questa? Sospetto di no ... ci sono diversi scenari in cui si desidera serializzare qualcosa che non fa parte dell'API pubblica, senza avere un DTO separato. Allo stesso modo, LINQ-to-SQL si concretizzerà in membri privati se lo scegli tu.
fonte
2010-01-18 07:02:59
Che cos'è * remoting *? –
@Tomas un meccanismo non integrato per parlare tra domini app. Questi possono essere in-process o su macchine separate in paesi diversi. –
"ci sono più scenari in cui si desidera serializzare qualcosa che non fa parte dell'API pubblica" - solo 2 possibilità: l'API è sbagliata e dovrebbe essere risolta o non è necessario serializzare quel "qualcosa". –