2016-08-02 21 views
0

このプロパティはCreate経由でインスタンスを取得するために使用されるファクトリパターン、からである。そして、ラムダ式は、プラットフォーム固有のプロジェクトのプロパティデリゲートに割り当てられている使用アクションの代わりのFunc

public class Dialer 
{ 
    public static Func<Dialer> Create; 
    public bool MakeCall(string number) ... 
    public Dialer(IDialer impl) { ... } 
} 

Dialer.Create =() => new Dialer(new PhoneDialeriOS()); 

と私は

this.dialer = Dialer.Create(); 
を使用して、プラットフォームに依存しないプロジェクト内のインスタンスを取得すると

は今、私はこの権利を取得する場合、割り当ては今

Dialer.Create = (d) => new Dialer(new PhoneDialeriOS()); 

ですが、どのように私はインスタンスを取得できますか?

public static Action<Dialer> Create; 

を使用していますよthis.dialer = Dialer.Create();を使用することにより

this.dialer = // ? 

私は「アクション」

の必要な仮パラメータ「OBJ」に対応するが、それはない与えられた引数はありません

エラーCS7036を取得PhoneDialeriOSのインスタンスを渡すのが理にかなっています。これは、プラットフォームに依存しないコードにはアクセスできないためです。私はそれについて誤解を招いているか、何かが足りないと思っています。

答えて

4

Action<Dialer>Dialerインスタンスを受け取り、そしてvoidを返すことデリゲートです。結局のところ、Actionです。値を返す(そして引き数を取得する)場合は、代わりにFunc<Dialer, Dialer>を使用する必要があります。

+0

それは事です。この例では 'public static Action Create;'について述べていますが、インスタンスを渡すことができないため、これはできません。 Imhoの例は偽です。 'public static Action 作成;は唯一正しい方法です。 – testing

+0

'public static Action Create'は依然として何も返さないデリゲートです。 「唯一の正しい方法」として何かを生み出すことができない工場をどう考えることができるか分かりません。 – Joey

+0

あなたは正しいです。コピー&ペーストエラーが発生しました。 'public static Func 作成;は唯一の正しい方法です。 – testing

1

次はあなたが(おそらく間違ってコピー/ペースト)することなく、

Dialer.Create =() => new Dialer(new PhoneDialerAndroid()); 

ような何かを行うことができます可能な用途もちろん

var specific_dialer = new Dialer(new PhoneDialeriOS()); 
var defualt_dialer = Dialer.Create(); 

編集

可能性を持つラインアクション

+0

ああそうです。ただし、特定のダイヤラへのアクセスは非常に限られています(プラットフォーム固有のプロジェクトでのみ)。 – testing

関連する問題