7
votes

Que signifie utiliser (objet obj = nouvel objet ())?

Que signifie cette affirmation dans C #? XXX


1 commentaires

Pour votre référence future, cela est documenté à la section 8.13 de la spécification C #.


5 Réponses :


12
votes

Cela signifie que obj code> implémente idisposible code> et sera correctement éliminé après le à l'aide du bloc code>. Il est fonctionnel de la même manière que:

{
  //Assumes SomeObject implements IDisposable
  SomeObject obj = new SomeObject();
  try
  {
    // Do more stuff here.       
  }
  finally
  { 
    if (obj != null)
    {
      ((IDisposable)obj).Dispose();
    }
  }
}


5 commentaires

Oh! Agréable! Merci pour la réponse.


Presque juste, en utilisant () n'implique pas une déclaration de capture, essayez / enfin.


@Jay Zeng, comme dans les graphiques? Si j'utilise mes graphiques à l'intérieur d'une déclaration "Utilisation", je n'aurai pas besoin de disposer?


Et le compilateur insère un chèque pour s'assurer que la valeur n'est pas nulle si la variable est d'un type nullable.


Personne n'a indiqué qu'il "touche" "touche" l'objet à la fermeture étroite en appelant la méthode .Dispose. Cela signifie que le collecteur des ordures ne touchera pas à l'objet à l'autre après le .Dispose ()



5
votes
object obj = new object();
try 
{
    // random stuff
}
finally {
   ((IDisposable)obj).Dispose();
}

1 commentaires

Presque équivalent. Dans le premier échantillon obj, il est hors de portée à la}. Dans la seconde, il est toujours dans la portée. Semblable à l'équivalence de la période pendant laquelle.



0
votes

C'est un moyen de mettre la portée d'un objet afin que la méthode de disposition est appelée à la sortie. Il est très utile pour les connexions de base de données dans les particulers. Une erreur d'heure de compilation se produira si l'objet ne met pas en œuvre Idisposable


0 commentaires

0
votes

en utilisant assure que l'objet alloué est correctement disposé après l'utilisation du bloc, même lorsqu'une exception non gérée survient dans le bloc.


0 commentaires

1
votes

Pourquoi cela existe-t-il.

Il existe pour les classes où vous vous souciez de leur vie, en particulier où la classe enveloppe une ressource dans le système d'exploitation et que vous souhaitez le libérer immédiatement. Sinon, vous devriez attendre les finaliseurs du CLR (non déterministe).

Exemples, poignées de fichier, connexions DB, connexions de socket, ....


1 commentaires

Je suis en désaccord - c'est un motif bien connu et encourage ainsi des bonnes pratiques communes. Pour la boucle, c'est aussi le sucre syntaxique - mais il est toujours utilisé parce que c'est un idiome commun aussi que j'essayais d'expliquer pourquoi vous voyez cela utilisé - et pourquoi vous verriez la version non du sucre