C# 使用列表<;界面>;在另一个接口C中#

C# 使用列表<;界面>;在另一个接口C中#,c#,asp.net-mvc-2,interface,C#,Asp.net Mvc 2,Interface,我正在尝试为ASP.NET MVC2中的模型类创建一个接口,我想知道是否可以在另一个接口中使用列表。我最好给出一个代码示例 我有两个接口,一个终端可以有多个机架。因此,我对我的接口编写如下代码 间隔接口: public interface IBay { // Properties int id {get; set;} string name {get;set;} // ... other properties } public interface ITermin

我正在尝试为ASP.NET MVC2中的模型类创建一个接口,我想知道是否可以在另一个接口中使用
列表。我最好给出一个代码示例

我有两个接口,一个终端可以有多个机架。因此,我对我的接口编写如下代码

间隔接口:

public interface IBay
{
    // Properties
    int id {get; set;}
    string name {get;set;}
    // ... other properties
}
public interface ITerminal
{
    // Properties
    int id {get;set;}
    string name {get;set;}
    // ... other properties
    List<IBay> bays {get;set;}
}
终端接口:

public interface IBay
{
    // Properties
    int id {get; set;}
    string name {get;set;}
    // ... other properties
}
public interface ITerminal
{
    // Properties
    int id {get;set;}
    string name {get;set;}
    // ... other properties
    List<IBay> bays {get;set;}
}
终端类别:

class Terminal : ITerminal
{
    // Constructor
    public Terminal()
    {
        // ... constructor
    }
}
然后可以访问这样的间隔列表

Terminal.Bays

如果您有任何帮助/建议,我们将不胜感激。

您可以通过使用具体实例填充接口列表来初始化接口列表。例如,要使用初始化
终端
类,可以使用类似以下代码:

Terminal terminal = new Terminal
{
    id = 0,
    name = "My terminal",
    bays = new List<IBay>
    {
        new Bay { id = 1, name = "First bay" },
        new Bay { id = 2, name = "Second bay" },
        new Bay { id = 3, name = "Third bay" },
    }
};
终端=新终端
{
id=0,
name=“我的终端”,
间隔=新列表
{
新间隔{id=1,name=“First Bay”},
新间隔{id=2,name=“第二间隔”},
新间隔{id=3,name=“第三间隔”},
}
};
关于代码的一些要点:

  • 按照惯例,所有的公共财产都应该登记。使用
    Id
    Id
    代替
    Id
    <代码>名称
而不是
名称
<代码>间隔而不是
间隔
<> LI>由于您非常重视接口,您应该考虑将<代码> Bays<代码>属性从“代码>列表>代码>改为<代码> IIST 。这将允许使用者为其分配
IBay[]
数组
这应该可以正常工作。只要意识到您的终端类仍将包含一个
列表
,可以根据需要使用
间隔
实例填充该列表。(请注意,我建议改用
IList

如果您希望终端返回具体的
间隔
类型,则需要重新设计终端界面,并将其修改为:

public interface ITerminal<T> where T : IBay
{
    // Properties
    int Id {get;set;}
    string Name {get;set;}
    IList<T> Bays {get;}
}

public Terminal : ITerminal<Bay>
{
     private List<Bay> bays = new List<Bay>();
     IList<Bay> Bays { get { return bays; } }
     // ...
     public Terminal()
     {
         bays.Add(new Bay { //...
公共接口终端,其中T:IBay
{
//性质
int Id{get;set;}
字符串名称{get;set;}
IList间隔{get;}
}
公共航站楼:ITerminal
{
私有列表间隔=新列表();
IList间隔{get{return Bays;}}
// ...
公共航站楼()
{
添加(新的间隔{/。。。

然而,增加这种复杂性可能没有什么价值。

除了一般设计建议的间隔应该是
IList
之外,您的代码看起来很好。它有什么问题吗?对不起,我不确定我是否理解。ITerminal接口意味着您需要将
Bays
访问器添加到终端对象中,然后您可以创建一个
列表
,并向其中添加
间隔
对象,然后从访问器返回该对象。或者您的意思是如何设置它,以便可以将
列表
作为
列表
返回?@ChrisShain:这更像是一个结构问题和最佳实践。@Rup:我将使用IList,而不是我在示例代码中使用的。Thanks。这是一个关于我应该如何开始设置接口的问题。我不清楚什么是最佳实践。你的回答正是我想要的。非常感谢你。+1:我个人更喜欢这种方法(泛型),前提是终端总是有相同的间隔列表(即相同类型或共享公共基类型)。非常感谢。我将从您的答案中选取一些,并将其与上面描述的@Douglas结合起来。@Douglas:是的,间隔将始终具有相同的类型,因此我将像这样实现此接口。