zu erklären, Ich versuche, eine interface
wie diese zu erstellen:Wie ein Verfahren in einer Schnittstelle mit unbekannten Anzahl und Typ Argumente
public interface IProcessable<out T>
{
T Result { get; }
T Execute(params object[] args);
}
ich eine Execute()
Methode haben wollen, die T
zurückgibt und kann jede Art von Argumenten akzeptieren.
Und ich will es so verwenden:
public class CustomProcess: IProcessable<int>
{
public int Result { get; private set; }
public int Execute(string customArg)
{
/// some codes to return int
}
}
IProcessable<int>
wird mich zwingen, eine Execute
Methode wie folgt hinzuzufügen:
public int Execute(params object[] args)
{
var customArg= args[0] as string;
if (customArg!= null) //I know that this is not so necessary for `string`
{
return Execute(customArg);
}
throw new Exception();
}
Ich denke, ich beide Methoden in CustomProcess
wegen breit haben sollte akzeptabler Bereich von object[]
.
weiß, dass ich fragen sollte:
Ist diese Art der Schnittstelle ist akzeptabel, oder ist eine Art eines anti-Muster?
Gibt es einen besseren Weg, um zu erreichen, was ich will - erstellen Sie eine Schnittstelle, die Klasse erzwingen Result
Eigenschaft und Execute
Methode -?
Es ist auch nicht sinnvoll, in erster Linie machen eine Schnittstelle für eine Reihe von verschiedenen Methoden zu haben, die alle haben unterschiedliche Signaturen * *. Das vereitelt den gesamten Zweck einer Schnittstelle. Entweder * stellen Sie sicher, dass alle Methoden die gleiche Signatur * verwenden, oder * verwenden Sie keine Schnittstelle *, weil Sie nichts daraus erhalten. – Servy