net example automatic asp c# .net properties

example - getter setter c#



Diferencias entre campos privados y propiedades privadas (6)

Aparte de lo que ya se ha respondido, Rendimiento, Sintética y Completitud hay un caso válido que he visto para propiedades privadas en lugar de un campo privado:

public class Item { private Item _parent; private List<Item> _children; public void Add(Item child) { if (child._parent != null) { throw new Exception("Child already has a parent"); } _children.Add(child); child._parent=this; } }

Digamos que no queremos exponer a Parent por el motivo que sea, pero es posible que también deseemos hacer comprobaciones de validación. ¿Se puede agregar un padre como hijo a uno de sus hijos?

Para resolver esto, puede hacer de esto una propiedad y realizar una verificación de referencias circulares.

¿Cuál es la diferencia entre usar Private Properties en lugar de Private Fields?

private String MyValue { get; set; } // instead of private String _myValue; public void DoSomething() { MyValue = "Test"; // Instead of _myValue = "Test"; }

¿Hay algún problema de rendimiento? o simplemente una convención de nombres?


Cuando se trata de acceso privado, las diferencias son muy pequeñas. Sí, hay un golpe de rendimiento (que puede ser optimizado por el JIT) las propiedades de envío representan una llamada a método, en lugar de un acceso de dirección directo.

La principal ventaja de usar propiedades es permitir el cambio de la implementación sin cambiar la firma externa requerida. Dado que se accede de forma privada, cualquier cambio en la implementación solo afecta el código local.

Cuando trato con miembros privados, no veo ninguna ventaja obtenida de las propiedades, a excepción de las convenciones de su equipo.


El acceso a la propiedad será (fraccionalmente) más lento ya que llamará al getter / setter. El beneficio es que puede hacer la validación de datos, que luego puede filtrar a los herederos si cambia la propiedad que desea proteger, por ejemplo.


Las propiedades privadas le permiten abstraer sus datos internos para que los cambios en la representación interna no tengan que afectar otras partes de su implementación, incluso en la misma clase. Los campos privados no ofrecen esta ventaja. Con propiedades automáticas en C # 3.0, rara vez veo la necesidad de implementar campos directamente, ya sean privados o públicos.


Es muy raro que desee hacer una propiedad privada. La provisión para que una propiedad sea privada se proporciona solo para completar. Y si su propiedad simplemente está obteniendo / estableciendo el valor del campo, entonces no hay diferencia en el rendimiento porque lo más probable es que esté enmarcado por el compilador JIT.


La gran ganancia que puede obtener de una propiedad (privada, pública, ...) es que puede producir un valor calculado frente a un valor establecido. Por ejemplo

class Person { private DateTime _birthday; private int _age { get { return (DateTime.Now - _birthday).TotalYears; } }

La ventaja de este patrón es que solo se debe actualizar un valor para N otros valores para reflejar el cambio. Esto es cierto de las propiedades independientemente de la accesibilidad. No existe una ventaja específica de una propiedad privada frente a una propiedad no privada (aparte de que sea privada, por supuesto)