Hallo,
ich möchte eine Klassen Methode auch einen Zeiger auf ein Prozedur / Funktion in der aufrufenden Klasse übergeben. Zum Beispiel eine Protokollmethode. Wie kann ich das machen?
Gruß Torsten
Danke Tossi
In C# bzw. .NET arbeitet man mit Referenzen und nicht mit Zeigern.
Magst mal beschreiben, was Du vor hast? Weil allein mit "Protokollmethode" kann zB ich jetzt nichts anfangen (es gibt Best Practises für Tracing, Logging und Protokollierung in .NET, die alle ohne "Zeiger" arbeiten).
Gibt hier verschiedene Dinge, die ich mir vorstellen könnte, was Du willst. Aber im Sinne des "Loggings" als Überschrift solltest Du das alles nicht nutzen und die Best Practises dazu beachten.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
In meinen MainForm habe ich eine Protokollfunktion:
private void Protokoll(String AMsg, Boolean bError = false)
{
//if(richTextBox1.TextLength > 0) richTextBox1.Text += Environment.NewLine;
if (richTextBox1.TextLength > 0) richTextBox1.AppendText(Environment.NewLine);
richTextBox1.SelectionBackColor = tmpColor;
richTextBox1.SelectionColor = Color.Black;
if (bError)
{
richTextBox1.SelectionBackColor = Color.Red;
richTextBox1.SelectionColor = Color.White;
}
richTextBox1.AppendText(AMsg);
}
In der MainForm wird ein DataPump ausgeführt:
private void DoDataPump()
{
DataTable dtQuelle = GVKonfig.DataSource as DataTable;
DataTable dtTemp = dtQuelle.Copy();
dtQuelle.DefaultView.RowFilter = "Stammdaten = 1 and Tabellenname like 'p_%' and Folge > 0";
DataTable dt = dtQuelle.DefaultView.ToTable();
foreach(DataRow r in dt.Rows)
{
SQL.DoDataPump(r["Tabellenname"].ToString(), r["Datenbankname"].ToString(), chkDeleteFirst.Checked,chkGenerator.Checked);
}
...
}
Hier ruhe ich in der statische Klasse den eigentlichen Datapump auf. Und hier würde ich gerne die Protokol Methode mit übergeben, damit ich eine Rückmeldung im Protokoll erhalte.
Gruß Torsten
Danke Tossi
Das einzige fertige dafür ist CallerMemberNameAttribute Class (System.Runtime.CompilerServices) | Microsoft Learn, was dazu verwendet werden könnte.
Willst Du aber Logging nutzen, wie man das eigentlich nutzen sollte, dann solltest Du stattdessen die Best Practises beachten und ILogger mit seiner empfohlenen Umsetzung verwenden.
PS: bitte in Zukunft die Code Tags verwenden. Hab Dein Beitrag editiert.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo Tossi65,
ich denke, du meinst ein Ereignis, welches du dann von außen abonnieren kannst und die Protokollmethode aufruft: [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse)