这是来自工厂模式,其中使用属性通过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();
我得到
错误CS7036没有给出对应于'Action'所需的形式参数'obj'的参数
但是在这里传递PhoneDialeriOS
的实例是没有意义的,因为在与平台无关的代码中无法访问它。我认为我所关注的例子是误导性的,或者我错过了一些东西。
答案 0 :(得分:4)
Action<Dialer>
是接收 Dialer
个实例的委托,并返回void
。毕竟,它是Action
。如果您希望它返回一个值(并获得参数),则需要使用Func<Dialer, Dialer>
代替。
答案 1 :(得分:1)
以下可能是可能的用法
var specific_dialer = new Dialer(new PhoneDialeriOS());
var defualt_dialer = Dialer.Create();
修改强>
当然你可以做点什么
Dialer.Create = () => new Dialer(new PhoneDialerAndroid());
没有(可能是错误的复制/粘贴)行与Action