Pregunta

¿Existe alguna diferencia (rendimiento, gastos generales) entre estas dos formas de inicializar un objeto?

MyTypedDataSet aDataSet = new MyTypedDataSet();
aDataSet .Merge(anotherDataSet);
aDataSet .Merge(yetAnotherDataSet);

y

MyTypedDataSet aDataSet = anotherDataSet;
aDataSet .Merge(yetAnotherDataSet);

¿Cuál recomiendas?

¿Fue útil?

Solución

Si bien Keith tiene razón, supongo que el ejemplo simplemente fue mal elegido.Generalmente, es mejor inicializar el objeto "correcto" desde el principio y no construya un objeto intermedio vacío como en su caso.Dos razones:

  1. Actuación.Esto debería ser obvio:La creación de objetos cuesta tiempo, por lo que es mejor crear menos objetos.
  2. Mucho Sin embargo, lo más importante es que expresa mejor su intención.generalmente lo haces no tiene la intención de crear objetos sin estado/vacíos.Más bien, pretende crear objetos con algún estado o contenido.Hazlo.No es necesario crear un temporal inútil (porque está vacío).

Otros consejos

Esas dos líneas hacen cosas diferentes.

El primero crea un nuevo conjunto y luego fusiona un segundo conjunto en él.

El segundo establece la referencia ds para que apunte al segundo conjunto, por lo que:

MyTypedDataSet ds1 = new MyTypedDataSet();
ds1.Merge(anotherDataSet);
//ds1 is a copy of anotherDataSet
ds1.Tables.Add("test")

//anotherDataSet does not contain the new table

MyTypedDataSet ds2 = anotherDataSet;
//ds12 actually points to anotherDataSet
ds2.Tables.Add("test");

//anotherDataSet now contains the new table

Ok, supongamos que lo que quisiste decir fue:

MyClass o1 = new MyClass();
o1.LoadFrom( /* some data */ );

//vs

MyClass o2 = new MyClass( /* some data */ );

Entonces lo último es mejor, ya que el primero crea un objeto vacío antes de llenarlo.

Sin embargo, a menos que inicializar una clase vacía tenga un coste elevado o se repita un gran número de veces, la diferencia no es tan importante.

Tu segundo ejemplo lo hace no crear un nuevo conjunto de datos.es solo un segundo referencia a un conjunto de datos existente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top