如何在界面上创建通用约束属性?

Dav*_*eer 4 c# generics

这完全有效:

public interface IWidgetGetter
{
    IEnumerable<T> GetWidgets<T>() where T : IWidget;
}
Run Code Online (Sandbox Code Playgroud)

也就是说,它定义了一个非类型化接口,该接口包含一个获取IEnumerable某种实现类型的方法IWidget.

如何将其变成属性?

不起作用的事情:

IEnumerable<T> Widgets<T> { get; set; } where T : IWidget
IEnumerable<T> Widgets { get; set; } where T : IWidget
IEnumerable<T> Widgets where T : IWidget { get; set; }
IEnumerable<T> Widgets<T> where T : IWidget { get; set; }
Run Code Online (Sandbox Code Playgroud)

Luc*_*ski 10

没有通用属性这样的东西.

类型参数仍然是一种参数.就像你无法转换一个将参数带入属性的方法一样,你也无法将泛型方法转换为属性.

你能做的最接近的事是:

public interface IWidgetGetter<T> where T : IWidget
{
    IEnumerable<T> Widgets { get; }
}
Run Code Online (Sandbox Code Playgroud)