Dies ist aus den Fabrik-Mustern, in dem eine Eigenschaft verwendet wird, eine Instanz über Create
zu erhalten:Verwenden Aktion statt Func
public class Dialer
{
public static Func<Dialer> Create;
public bool MakeCall(string number) ...
public Dialer(IDialer impl) { ... }
}
Dann wird ein Lambda-Ausdruck auf die Eigenschaft Delegaten in dem plattformspezifischen Projekt zugeordnet ist mit
Dialer.Create =() => new Dialer(new PhoneDialeriOS());
und eine Instanz in dem plattformunabhängigen Projekt zu bekommen ich
this.dialer = Dialer.Create();
Jetzt suche ich
public static Action<Dialer> Create;
Wenn ich dieses Recht zu nutzen, ist die Zuordnung jetzt
Dialer.Create = (d) => new Dialer(new PhoneDialeriOS());
aber wie bekomme ich eine Instanz?
this.dialer = // ?
von this.dialer = Dialer.Create();
ich mit bekommen
Fehler CS7036 Es gibt kein Argument gegeben, die auf den erforderlichen formalen Parameter entspricht 'obj' von 'Action'
Aber es funktioniert nicht sinnvoll, hier eine Instanz von PhoneDialeriOS
zu übergeben, da im plattformunabhängigen Code kein Zugriff darauf besteht. Ich denke, das Beispiel, auf das ich mich beziehe, ist irreführend oder ich vermisse etwas.
Das ist die Sache. Das Beispiel redet über 'public static Action Create;', aber das ist nicht möglich, weil ich die Instanz nicht übergeben kann. Imho das Beispiel ist falsch. 'public static Action Erstellen;' ist der einzig richtige Weg. –
testing
'öffentliche statische Aktion Erstellen ist immer noch ein Delegat, der nichts zurückgibt. Ich bin mir nicht sicher, wie man eine Fabrik betrachten kann, die nichts als "den einzig richtigen Weg" produzieren kann. –
Joey
Sie haben Recht. Ich habe einen Fehler beim Kopieren und Einfügen gemacht. 'public static Func Create;' ist der einzig richtige Weg. –
testing