【问题标题】:Define Generic List from interface从接口定义通用列表
【发布时间】:2017-01-29 15:36:53
【问题描述】:

这可能是一个简单的答案,但我正在创建一个我认为是包含通用列表定义的简单接口。基本上只是说“创建一个通用列表”,如下所示:

public static List<UserControl> ViewList = new List<UserControl>();

事实证明,这比我预期的要困难。也许我做错了?我尝试的每个定义都会导致预期列表成为属性或方法。例如,我尝试了以下没有运气

//FirstTry
    public interface IAddToViewList
    {
        List<UserControl> ViewList();
    }
//Second
    public interface IAddToViewList
    {
        List<UserControl> ViewList { get; set; }
    }

此外,我不确定是否可以包含该列表应该是静态的,我很难找到符合这些要求的问题的人,可能是因为这不可能,或者我想错了怎么办?

【问题讨论】:

  • 接口没有成员。他们只有方法。接口只是定义实现这个接口的东西应该有什么方法。在我看来,您可能想要一个抽象类而不是接口。

标签: interface generic-list


【解决方案1】:

接口是抽象方法的集合。这意味着您无法向它们添加类变量。

您需要在功能上完成此任务的是一个抽象类。

public abstract class AddToViewList
{
    List<UserControl> ViewList;
}

但是,您需要做的就是定义一个返回列表的方法

public interface IAddToViewList
{
    public List<UserControl> createViewList();
}

这将确保实现 IAddToViewList 的每个类也具有 createViewList() 方法。现在,在这种情况下,UserControl 必须是一个已定义的类,因此这是一个 UserControl 对象列表,而不是“通用列表”。

为了使列表通用,您在接口名称后添加了菱形:

public interface IAddToViewList<UserControl>
{
    public List<UserControl> createViewList();
}

那么当你实现你的类时,它看起来像这样

public class Foo implements IAddToViewList<String>
{
    public List<String> createViewList(){
        // TODO
        return null;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多