Ich muss einige Delegierte in meiner Klasse haben.
Ich möchte die Schnittstelle verwenden, um mich daran zu erinnern, diese Delegaten festzulegen.
Wie man?
Meine Klasse sieht so aus:
public class ClsPictures : myInterface
{
// Implementing the IProcess interface
public event UpdateStatusEventHandler UpdateStatusText;
public delegate void UpdateStatusEventHandler(string Status);
public event StartedEventHandler Started;
public delegate void StartedEventHandler();
}
Ich brauche eine Schnittstelle, um diese Delegierten zu zwingen:
public interface myInterface
{
// ?????
}
Seit .NET 3.5 können Sie auch die System.Action-Delegaten verwenden, ohne Ihren eigenen Typ deklarieren zu müssen.
Dies würde zu folgender Schnittstelle führen:
quelle
Stellen Sie den Delegaten einfach als Eigenschaft bereit
quelle
Jon Skeets Antwort ist richtig, ich möchte nur eine Notiz hinzufügen.
Schnittstellen sind nicht dazu da, Sie daran zu erinnern, was zu tun ist oder was Sie in Ihren Unterricht aufnehmen sollen. Schnittstellen sind Abstraktionsmittel, die in objektorientierten Programmier- und Entwurfsmethoden verwendet werden. Möglicherweise benötigen Sie überhaupt keine Schnittstellendeklaration, es sei denn, Sie möchten einige konkrete Klasseninstanzen als Schnittstelle an anderer Stelle in Ihrem Programm anzeigen (Abstraktion).
Wenn Sie einige Codierungsstandards in Ihrem Projekt durchsetzen möchten, können Sie versuchen, Code-Analyse-Tools (wie in Visual Studio) zu verwenden. Sie ermöglichen Erweiterungen, die Sie einbinden können, um Ihre eigenen Code-Analyseregeln hinzuzufügen.
Wenn Sie bei der Codeanalyse das Hinzufügen der Delegaten "vergessen" (obwohl ich nicht den Grund sehe, es zu vergessen, als ob der Delegat nicht verwendet wird, wird er nicht benötigt), erhalten Sie eine Warnung / einen Fehler.
quelle
Einer Ihrer Kommentare bezog sich auf den Rückgabetyp des Ereignishandlers. Sind Sie mehr mit dem Typ des Handlers oder den Daten beschäftigt, die vom Ereignis zurückkommen? Wenn es das letztere ist, kann dies helfen. Wenn nicht, reicht diese Lösung nicht aus, kann Ihnen aber dabei helfen, näher an das heranzukommen, wonach Sie suchen.
Sie müssen lediglich Ihre Ereignishandler als generische Ereignishandler sowohl in der Benutzeroberfläche als auch in Ihrer Implementierung deklarieren und die Rückgabeergebnisse anpassen.
Ihre konkrete Klasse würde so aussehen:
Ihre Benutzeroberfläche würde folgendermaßen aussehen:
Nachdem die Ereignisargumente Ihre Typen zurückgeben, können Sie sie in jeden von Ihnen definierten Handler einbinden.
Als Referenz: https://msdn.microsoft.com/en-us/library/edzehd2t(v=vs.110).aspx
quelle
Die in Ihrer abgeleiteten Klasse geerbte Schnittstelle erinnert Sie daran, die darin deklarierten Inhalte zu definieren und zu verknüpfen.
Möglicherweise möchten Sie es aber auch explizit verwenden, und Sie müssen es dennoch einem Objekt zuordnen.
Zum Beispiel mit einem Inversion of Control-Muster:
Sie können so etwas versuchen.
quelle