Ich habe eine BaseImageView (Plattform ist hier irrelevant), die eine Eigenschaft Effect
hat, die ein command Objekt ist.Warum kann ich diese Methode nicht als statisch markieren?
Ich möchte alle meine Befehle zu implementieren IImageEffect
, die eine static
Methode ApplyEffect
hat, ein Bild zu nehmen und das Bild mit dem Effekt zurückgibt.
Aber der Compiler beschwert sich, dass ich eine Interface-Methode nicht als static
markieren kann, aber das scheint die logische Option zu sein (da für den Effekt keine Statusinformationen benötigt werden).
Ich frage dies, weil ich 100 Effektobjekte benötigen würde, um einen Effekt auf 100 verschiedene Bilder anzuwenden, während ich mit der Klasse fortfahren und die statische Methode aufrufen könnte, würde dies die 100 Instanzen beseitigen.
Gibt es eine Möglichkeit, ich kann eine statische Schnittstelle haben, oder eine Möglichkeit, die ich eine Klasse übergeben kann und es die statische ApplyEffect
dieses Typs aufrufen?
Nein, Schnittstellenelemente können nicht statisch sein. Wie würde die CLR wissen, welche Implementierung Sie aufrufen wollten, wenn Sie 'IImageEffect.ApplyEffect' aufgerufen haben? (Es gibt ein Argument für statische Interface-Member mit generischen Typargumenten, aber das ist subtiler.) –
@JonSkeet Ich würde eine Klasse an die 'Effect'-Eigenschaft übergeben und dann' ApplyEffect' für diese Klasse aufrufen, so dass sie zu 'EffectClass' würde .ApplyEffect'. Dann würde es wissen, in welcher spezifischen Klasse ich es nennen möchte. – vrwim
Sorry, das ist ohne ein konkretes Beispiel * in der Frage * sehr schwer zu verstehen. Wenn Sie nur eine statische Methode verwenden möchten, die immer dasselbe tut, fügen Sie sie einfach in eine Klasse anstelle einer Schnittstelle ein. –