Esto es necesario para escenarios como la comunicación remota, la serialización, la materialización, etc. No debe utilizarlo a ciegas, pero tenga en cuenta que estas instalaciones tienen siempre disponibles en cualquier sistema (básicamente, dirigiéndose a la memoria directamente) . La reflexión simplemente lo formaliza y coloca controles y controles en el camino, que no está viendo porque presumiblemente se ejecuta con "plena confianza", por lo que ya es más fuerte que el sistema que se está protegiendo.
Si prueba esto en confianza parcial, verá mucho más control sobre el estado interno.
¿Es un antipatrón?
Solo si su código lo usa de manera inapropiada. Por ejemplo, considere la siguiente (válido para un contrato de datos de WCF):
[DataMember]
private int foo;
public int Foo { get {return foo;} set {foo = value;} }
¿Es incorrecto para WCF para apoyar esto? Sospecho que no ... hay múltiples escenarios en los que desea serializar algo que no es parte de la API pública, sin tener una DTO separada. Del mismo modo, LINQ-to-SQL se materializará en miembros privados si así lo eliges.
¿Qué es * remoting *? –
@Tomas un mecanismo no construido para hablar entre aplicaciones-dominios. Estos pueden estar en proceso o en máquinas separadas en diferentes países. –
"hay varios escenarios en los que desea serializar algo que no es parte de la API pública": solo 2 posibilidades: la API es incorrecta y debe corregirse o no tiene que serializar ese "algo". –