【问题标题】:How can I create a list with Interface Instances如何使用接口实例创建列表
【发布时间】:2014-05-28 04:44:32
【问题描述】:

我有一个界面:

public Interface IStudent
{
    Students students {get;}
    Boolean CanStayAfterHours;
}

public enum Students
{
    Student1,
    Student2,
    Student3,
    Student4
}

如何将IStudent 属性添加到通用列表中? List<IStudent>?

【问题讨论】:

  • 你能改写你的问题吗?您只是在问如何创建IStudent 实例列表吗?
  • @SimonWhitehead 是的,很抱歉造成混淆。我想用 IStudent 实例填充列表
  • 在这种情况下,您希望将IStudent items 添加到列表中,而不是“属性”。你像往常一样做:创建对象并调用Add。您创建的对象必须是实现IStudent 接口的某种或多种类型。

标签: c# list generics enums


【解决方案1】:

您首先需要有一个实现该接口的类:

public class Student : IStudent {
    Students students { get; set; } // set, for example
    Boolean CanStayAfterHours { get; set; }
}

然后您可以将它们添加到这样的列表中:

var studentList = new List<IStudent>() {
    new Student() { CanStayAfterHours = true },
    new Student() { CanStayAfterHours = false, Students = Students.Student1 },
    new Student() { CanStayAfterHours = true },
};

你的设计没有多大意义......但我会让你去弄清楚。

【讨论】:

  • 你的代码不会编译,你在设置属性,比如student,界面上只有getter,没有setter
  • 鹰眼 - 谢谢。添加了一个设置器来显示示例。
  • 酷,与设置学生属性相同
  • 我应该在输入答案时停止调试:P
【解决方案2】:

IList&lt;IStudent&gt; 可用于保存 IStudent 对象的列表。当然你需要一个实现IStudentclass Student,因为你不能创建一个接口的实例。枚举的目的不明确,您显然不希望每个学生都有一个枚举值,因为每次有新学生注册时都需要重新构建您的应用程序。

【讨论】:

    【解决方案3】:

    您需要实现一个实现接口的具体对象

    公共类 ConcreteStudent : IStudent {

    public Students students { get; set; }
    public bool CanStayAfterHours { get; set; }
    

    }

    界面需要做一些改动,我在界面中添加了一些setter,希望与你的设计一致

    公共接口 IStudent {

        Students students { get; set; }
        Boolean CanStayAfterHours { get; set; }
    

    }

    然后将这些对象添加到列表中,我们执行以下操作

    List<IStudent> students = new List<IStudent>()
    students.Add(new ConcreteStudent()
    {
     students = Students.Student1,
    
    });
    

    【讨论】:

      【解决方案4】:

      接口ListofPatientService { 列表

        retriev();
      
      }
      class listofServiceDummy : ListofPatientService
      {
          List<patientmodel> list = new List<patientmodel>
          {
               new patientmodel(){Name="Abdi", Age= 30, Description=""},
               new patientmodel(){Name="HassaN", Age= 40, Description=""},
                new patientmodel(){Name="Hasna", Age= 35, Description=""},
                 new patientmodel(){Name="Moktar", Age= 50, Description=""},
                  new patientmodel(){Name="Liban", Age= 55, Description=""},
          };
      
      }
      

      【讨论】:

      • 提供更多上下文可以提高答案质量和可能的赞成投票行为,而不是触发反对投票的行为。请记住,您正在与已经提供给 OP 的另外两个答案竞争。还要查看标记,因为有一个松散的“{”。审查结束。
      猜你喜欢
      • 2016-08-13
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多