Pergunta

Existe alguma diferença (desempenho, sobrecarga) entre essas duas formas de inicializar um objeto:

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

e

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

Qual você recomenda?

Foi útil?

Solução

Embora Keith esteja certo, suponho que o exemplo foi simplesmente mal escolhido.Geralmente, é melhor inicializar com o objeto “certo” desde o início e não construa um objeto intermediário e vazio como no seu caso.Duas razões:

  1. Desempenho.Isso deveria ser óbvio:A criação de objetos custa tempo, portanto, criar menos objetos é melhor.
  2. Muito mais importante, no entanto, afirma melhor o seu intenção.Você geralmente faz não pretende criar objetos sem estado/vazios.Em vez disso, você pretende criar objetos com algum estado ou conteúdo.Faça isso.Não há necessidade de criar um temporário inútil (porque vazio).

Outras dicas

Essas duas linhas fazem coisas diferentes.

O primeiro cria um novo conjunto e depois mescla um segundo conjunto nele.

O segundo define a referência ds para apontar para o segundo conjunto, então:

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, vamos supor que o que você quis dizer foi:

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

//vs

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

Então o último é melhor, pois o primeiro cria um objeto vazio antes de preenchê-lo.

No entanto, a menos que inicializar uma classe vazia tenha um custo alto ou seja repetido um grande número de vezes, a diferença não é tão importante.

Seu segundo exemplo faz não crie um novo conjunto de dados.É só um segundo referência para um conjunto de dados existente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top