如何定义属性以容纳泛型接口类型

本文关键字:泛型 接口类型 属性 何定义 定义 | 更新日期: 2023-09-27 17:54:34

考虑下面的接口…

public interface ILibraryService<T>
where T : Library
{
    ReadOnlyObservableCollection<T> AvailableLibraries { get; }
}

我想定义一个静态属性,它可以容纳任何实现这个接口的对象,就像下面的伪代码…

public static class Services
{
    public static ILibraryService<T> LibraryService { get; set; }
}

…但我不知道如何定义这个属性。我知道这很简单,但我就是看不出来

如何定义属性以容纳泛型接口类型

这些是你想要的吗?据我所知,微软故意避免给我们在属性上添加类型子句的能力。

public static class Services
{
    public static ILibraryService<T> GetLibraryService<T>() 
        where T : Library
    {
        return null; // ...
    }
}
public static class Services<T>
    where T : Library
{
    public static ILibraryService<T> LibraryService { get; set; }
}
public static class Services<T>
    where T : ILibraryService<Library>
{
    public static T LibraryService { get; set; }
}
public static class Services<TService, TLibrary>
    where TService : ILibraryService<TLibrary>
    where TLibrary : Library
{
    public static ILibraryService<TLibrary> LibraryService { get; set; }
}