Verwenden Sie die using
-Anweisung in der aufrufenden Methode, nicht die Methode, die das Objekt zurückgibt.
public void Caller()
{
using(DataSet ds = GetDataSet())
{
// code here
}
}
public DataSet GetDataSet()
{
// don't use a using statement here
return ds;
}
Die using
Anweisung ist grundsätzlich die gleiche wie, dies zu tun:
DataSet ds = null;
try
{
// code here
}
finally
{
if(ds != null)
{
ds.Dispose();
ds = null;
}
}
Also, wenn Sie eine using
Anweisung in einem Verfahren verwendet, das angeblich das Objekt in der using
Anweisung zurückzukehren, wäre es Rückgabe eines disponierten Objekts (dh geschlossener Stream, geschlossener Datensatz usw.), was bedeutet, dass einige der internen Objekte null oder geschlossen sein können. Mit anderen Worten, alle internen Ressourcen würden aufgeräumt werden, was den Zweck der Implementierung von IDisposable überhaupt darstellt. Wenn Ihre Anwendung darauf angewiesen ist, dass einige dieser internen Ressourcen verfügbar sind, z. B. bei Verwendung eines Stream-Objekts, wird eine Ausnahme ausgelöst. Bitte beachten Sie, dass nicht alle finally
Blöcke gleich geschrieben sind. Denken Sie daran, IDispoable wurde implementiert, um alle internen Ressourcen und nicht verwalteten Objekte zu bereinigen. Diese internen Ressourcen werden möglicherweise nicht außerhalb der using
-Anweisung benötigt, sodass die Verwendung der using
-Anweisung manchmal so aussieht, als ob sie ordnungsgemäß funktioniert, aber es wird nicht empfohlen und wird definitiv nicht mit allen Objekten funktionieren. Wenn sich Microsoft dazu entschloss, das DataSet-Objekt in einer zukünftigen Version zu ändern und damit etwas Wichtiges für Ihre Anwendung zu entfernen, würde Ihr Arbeitscode plötzlich nicht mehr funktionieren.
Wenn Sie ein Objekt zurückgeben möchten, warum möchten Sie es entsorgen? –
@Mert - Ich möchte wissen, was der Schaden ist? Gibt es Datenverluste? Ich habe bestätigt, dass es in Ordnung ist ... Meine Frage ist - gibt es etwas nicht vorteilhaftes, dass ich vermisse? –
Sie haben es verifiziert? Nett. Viel zu wenige Leute beweisen tatsächlich ihren Code mit formalen Methoden :) – Joey