【发布时间】:2021-11-17 14:38:02
【问题描述】:
假设我有一个类似的帮助类
public class Selection<T, W> : ISelection<T,W> where W : ICollection<T>
{
public Selection(Func<W> selectableItemsProvider)
{
...
}
}
由于 C# 不支持委托接口实现,我想我会为自己节省一些样板文件,只需扩展 Selection 类...
public class MyFoo : Selection<Blah, List<Blah>>
{
private List<Blah> _blahs = new List<Blah>();
public MyFoo() : base(() => _blahs)
{
...
}
}
除非我不能那样做,我可以吗,因为
无法在静态上下文中访问非静态属性“_blahs”
即使我已经知道在对象构造之后才会调用提供程序。
有没有办法解决这个问题,还是我坚持添加样板代码?
【问题讨论】:
-
添加受保护的空构造函数然后允许直接分配
selectableItemsProvider(例如使其成为受保护的成员)? -
你的意思是不会在
Selection构造函数中调用提供者? -
@Sweeper 完全正确。
-
我会按照@Evk 的建议去做:
protected Func<W> SelectableItemsProvider { get; }、protected Selection() { }、public MyFoo() { SelectableItemsProvider = () => _blahs; } -
@Evk 但是我不能再要求在对象实例化之后设置提供程序。
标签: c# constructor delegates member