resolucion propiedades pantalla objetos formularios escala dinamicos autoscalemode automático ajuste ajustar c# vb.net .net-4.0 automatic-properties

pantalla - ¿Por qué las propiedades automáticas de C#no son compatibles con valores predeterminados como VB 2010?



objetos dinamicos c# (4)

¿Por qué no solo los predetermina en el constructor? Para eso es también.

En cuanto a las nuevas características de VB 2010, tropecé con el soporte para las propiedades implementadas automáticamente .

Dado que estoy trabajando con C #, me pareció bastante familiar, pero noté que VB agregó una característica que me gustaría tener en C #: establecer un valor predeterminado arbitrario para la propiedad implementada automáticamente:

Public Class Person Property Name As String = "Scott Guthrie" Property Age as Integer = 35 End Class

Me gusta mucho el uso limpio de auto-propiedades en C #. Esto nos ahorraría el esfuerzo de introducir un campo de respaldo y conectarlo a la propiedad cada vez que simplemente necesitamos un valor predeterminado, lo que complicaría innecesariamente el código.

Me preguntaba por qué esto no se introdujo también en C #. ¿Cuál podría ser la razón para no hacer esto? ¿Está en curso una discusión de sintaxis o existen limitaciones técnicas para implementar esto?


Qué pasa:

public class Person { public Person() { this.Name = "Scott Guthrie"; this.Age = 35; } public string Name { get; set; } public string Age { get; set; } }

en la práctica, eso se reduce a lo mismo y no es mucho trabajo extra, creo. Pero quizás, por una vez en mucho tiempo, VB parece más claro que C # ... ;-)

EDITAR (razonamiento):
Usted estaba pidiendo la razón en su último comentario bajo (y en) su pregunta original. Pensando en voz alta, creo que el principio en C # que el código de inicialización va a un lugar y un solo lugar, es decir, el constructor, es el motivo de esta decisión. Agregar otro lugar donde tenga que buscar el código de inicialización hace que la depuración sea más difícil y el código menos claro.

Obviamente, un valor de inicialización en línea no puede contener otras inicializaciones o cálculos (al menos, muy limitados). Si bien estoy de acuerdo en que puede ser más conciso en la forma de VB, entendería que el equipo de C # y Anders Hejlsberg si dicen que consideran una mayor ventaja tener un lugar para la inicialización.

EDITAR: esto es lo que Microsoft dice al respecto . En resumen, no para C # 4.0, ¿pero quizás para C # 5.0? También:

"No es tan fácil como suena: lo próximo que quieres es que el constructor inicialice el campo de respaldo, pero solo puede hacerlo a través del colocador, que puede no ser lo que quieres".

y (solo un comentarista):

"La falta de inicialización o el control del constructor hace que la característica sea prácticamente inútil para las propiedades que devuelven un tipo de referencia".


Si bien no soy Microsoft, sugeriría que el beneficio percibido era menor que el costo de implementar, probar y dar soporte a la función.

Por supuesto, puedes establecer los valores predeterminados declarando un constructor, pero estoy de acuerdo en que la sintaxis de VB es un poco más clara (especialmente si vas a decorarla con metadatos como <DefaultValue(...)> )


Tengo una solución para el tedioso negocio de convertir una propiedad de auto en un campo de propiedad con respaldo: Mi complemento, AtomineerUtils hará esa refactorización para usted con una sola pulsación de tecla.