我应该创建一个或多个列表吗?

时间:2018-02-08 13:13:24

标签: c#

基本的控制台界面应用程序,允许用户根据以下类添加/搜索信息:

College.cs (Program.cs) 
Person.cs 
Student.cs
Staff.cs
Lecturer.cs

StaffStudent都继承了Person

的功能

第一步是为Person定义属性,构造函数,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StudentApp
{
    class Person
    {

        //Auto-implemented properties
        public int PpsnNo { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

        public string Address { get; set; }

        public string Phone { get; set; }

        public string Email { get; set; }


        //Constructors 
        public Person() { }
        public Person(int ppsn, string first, string last, string address, string phone, string email)
        {

            PpsnNo = ppsn;
            FirstName = first;
            LastName = last;
            Address = address;
            Phone = phone;
            Email = email;

        }

        //Method
        public override string ToString()
        {

        }

    }
}

接下来,我已经开始在Student类中创建一个List,如下所示(我知道有不必要的/冗余的方法,它实际上只是存储列表的位置的问题):

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ICollection_Example
{
    class Student :ICollection<Person>
    {
        //property
        private List<Person> StudentList;

        //Constructor
        public Person()
        {
            StudentList = new List<Person>();
        }

        #region interface Properties
        public int Count { get; }

        public bool IsReadOnly
        {
            get { return false; }
        }
        #endregion

        #region Interface Methods
        public void Add(Person book)
        {
            StudentList.Add(book);
        }

        public void Clear()
        {
            StudentList.Clear();
        }

        public bool Contains(Person book)
        {
            return StudentList.Contains(book);
        }
        public bool Remove(Book book)
        {
            return StudentList.Remove(book);
        }
        public void CopyTo(Person[] array, int index)
        {
            StudentList.CopyTo(array, index);
        }
        public IEnumerator<Person> GetEnumerator()
        {
            return StudentList.GetEnumerator();
        }

       IEnumerator IEnumerable.GetEnumerator()
        {
            return StudentList.GetEnumerator();
        }

        #endregion

        #region Student Methods
        public bool Remove(string ppsno)
        {
            bool flag = false;
            for(int i = 0; i < StudentList.Count && flag==false; i++)
            {
                if(StudentList[i].Ppsno == ppsno)
                {
                    StudentList.Remove(StudentList[i]);
                    flag = true;
                }
            }
            return flag;
        }

        #endregion
    }
}

是否有必要为Staff类再次创建这样的列表,或者创建单个列表以存储在其他地方(可能在Person中)更有意义,然后在继承另一个类的类&#39;功能 - 在这种情况下,StudentStaff会引用Person中存储的列表吗?

1 个答案:

答案 0 :(得分:3)

我认为您正在混淆个人StudentStaff的责任,即Person扩展College并添加特定于角色的功能,{{1} (基于您的类列表),用于容纳各种人员和设施,并为他们提供交互的方式。我建议让Student直接从Person继承,让College类有多个集合,每个类型一个。如果您想要一个学院所有人的列表,您可以向返回College的{​​{1}}类添加一个方法,并连接IEnumerable<Person>Students的集合,等