使用 Action 而不是 Func
Use Action instead of Func
这是来自工厂模式,其中一个属性用于通过Create
获取一个实例:
public class Dialer
{
public static Func<Dialer> Create;
public bool MakeCall(string number) ...
public Dialer(IDialer impl) { ... }
}
然后将 lambda 表达式分配给平台特定项目中的 属性 委托
Dialer.Create = () => new Dialer(new PhoneDialeriOS());
并在我使用的独立于平台的项目中获取一个实例
this.dialer = Dialer.Create();
现在我想使用
public static Action<Dialer> Create;
如果我做对了,现在的作业是
Dialer.Create = (d) => new Dialer(new PhoneDialeriOS());
但是如何获取实例?
this.dialer = // ?
通过使用 this.dialer = Dialer.Create();
我得到
Error CS7036 There is no argument given that corresponds to the required formal parameter 'obj' of 'Action'
但是在这里传递一个PhoneDialeriOS
的实例是没有意义的,因为在平台无关的代码中没有访问它的权限。我认为我提到的例子具有误导性,或者我遗漏了一些东西。
Action<Dialer>
是一个委托,它 接收 一个 Dialer
实例,并且 return 接收 void
。毕竟是 Action
。如果你想让它 return 一个值(并得到一个参数),你需要使用 Func<Dialer, Dialer>
代替。
以下是可能的用法
var specific_dialer = new Dialer(new PhoneDialeriOS());
var defualt_dialer = Dialer.Create();
编辑
当然你可以这样做
Dialer.Create = () => new Dialer(new PhoneDialerAndroid());
没有(可能是错误的 copy/paste)行与 Action
这是来自工厂模式,其中一个属性用于通过Create
获取一个实例:
public class Dialer
{
public static Func<Dialer> Create;
public bool MakeCall(string number) ...
public Dialer(IDialer impl) { ... }
}
然后将 lambda 表达式分配给平台特定项目中的 属性 委托
Dialer.Create = () => new Dialer(new PhoneDialeriOS());
并在我使用的独立于平台的项目中获取一个实例
this.dialer = Dialer.Create();
现在我想使用
public static Action<Dialer> Create;
如果我做对了,现在的作业是
Dialer.Create = (d) => new Dialer(new PhoneDialeriOS());
但是如何获取实例?
this.dialer = // ?
通过使用 this.dialer = Dialer.Create();
我得到
Error CS7036 There is no argument given that corresponds to the required formal parameter 'obj' of 'Action'
但是在这里传递一个PhoneDialeriOS
的实例是没有意义的,因为在平台无关的代码中没有访问它的权限。我认为我提到的例子具有误导性,或者我遗漏了一些东西。
Action<Dialer>
是一个委托,它 接收 一个 Dialer
实例,并且 return 接收 void
。毕竟是 Action
。如果你想让它 return 一个值(并得到一个参数),你需要使用 Func<Dialer, Dialer>
代替。
以下是可能的用法
var specific_dialer = new Dialer(new PhoneDialeriOS());
var defualt_dialer = Dialer.Create();
编辑
当然你可以这样做
Dialer.Create = () => new Dialer(new PhoneDialerAndroid());
没有(可能是错误的 copy/paste)行与 Action