Wie vermeiden Sie einen Defekt „Einwegfields SHOOLDBETSISPLOSEDRULE“ auf Feldern, die ich nicht entsorgen möchte?

StackOverflow https://stackoverflow.com/questions/4538696

  •  13-10-2019
  •  | 
  •  

Frage

Es gibt eine idisposable, die ein Feld für den Logger enthält:

class DoesNotDisposeMember : IDisposable {
  public IDisposable Logger { get; set; }

  public void Dispose ()
  {
    logger = null;
  }
}

Gendarme berichtet, dass es a gibt Einwegfields SHOOLDBETSPOSEDRULE-DESTECT, aber ich möchte den Logger nicht entsorgen.

Kann mir jemand helfen?

War es hilfreich?

Lösung

Seite setzen, warum Sie es nicht entsorgen möchten; Wenn Sie es nicht entsorgen wollen, sollten Sie es wahrscheinlich nicht in einem aufbewahren IDisposable Mitglied dann. Der einzige wirkliche Zweck dieser Schnittstelle ist es, diesen Artikel zu bezeichnen/zu aktivieren.

Wenn es sich um ein Protokollierungsobjekt handelt, gibt es keine weitere gemeinsame Basisschnittstelle/-klasse, die Sie verwenden können, wie z. B. eine abgeleitete Stream oder StreamWriter?

Jetzt, wo ich das geschrieben habe, schlägt es mir natürlich auf, dass dies immer noch gehört IDisposable In der Hierarchie ... was ich vermute zurück zu dem, was ich gesagt habe, würde ich beiseite legen:

Warum stellen Sie hier eine Variable fest, die Sie nicht entsorgen möchten? Wenn Sie es an anderer Stelle entsorgen, sollten Sie es wahrscheinlich auch dort verwenden. Der Code, der das Logger -Objekt einwickelt, sollte die gesamte Funktionalität verarbeiten, einschließlich der Belegung der separaten Schnittstelle zu Ihren Modell-/Geschäftsobjekten, die die Protokollierung ermöglicht.

Wenn Sie die Protokollierung in einem anderen Objekt zusammenfassen, sollten Sie das interne Protokollierungsstromobjekt außerhalb dieses Objekts nicht verweisen. Wenn Sie die Protokollierung an anderer Stelle nicht verkapsend machen, sollte diese Klasse sie angemessen entsorgen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top