我希望能够拥有一个 getter 属性,该属性将采用
IService
的实例并返回一个称为异步的委托。
例如:
public class DelAccessor
{
public Func<IService, Task<Delegate>> Getter { get; set; }
}
我希望能够像这样调用它
await a.Getter(service);
我正在努力寻找正确的语法
new DelAccessor()
{
Getter = service => (Func<string, Task<object>>)((t) =>
{
var v = new object();
// perform async call
return v;
});
我收到编译器错误
无法将类型
隐式转换为Func<string, Task<object>>
Task<Delegate>
定义可以称为异步的 getter 的正确方法是什么?
这可能会起作用。您有一个用于
delegate
的 Task<string>
,称为 ReadFileDelegate
(为了在示例中清晰起见,将其重命名)和 delegate
类型的 ReadFileDelegate
的只读属性。
public class DelAccessor
{
public delegate Task<string> ReadFileDelegate(string name);
public ReadFileDelegate ReadFile => ReadFileText;
private async Task<string> ReadFileText(string name)
{
var str = await File.ReadAllTextAsync(name);
return str;
}
}
用途:
var d = new DelAccessor();
var text = d.ReadFile(@"C:\test.txt");
如果您愿意,可以移动该函数,然后在另一个类中设置
ReadFile
属性(如果将其更改为:)
// you could also use set (instead of init) depending on your needs
public ReadFileDelegate ReadFile { get; init; }
实际的
ReadFileText
功能可以移动到任何地方。