如何使用IPrintable接口?

时间:2015-11-16 20:07:26

标签: c# list interface

我在使用IPrintable接口时遇到了一些问题。

我有类Student类,它继承自Person类+ studentID和类Person(name,lastname)。我必须用Print()程序编写IPrintable。 Print()应打印出Person或Student类中的每个字段。接下来我必须创建4个对象。

  1. 类对象分配给Person类型变量的人员
  2. 类对象分配给Person类型变量的学生
  3. 类对象分配给Student
  4. 类型变量的学生
  5. 类对象学生分配给IPrintable类型的变量
  6. 接下来,我必须创建IPrintable对象列表,并将所有创建的对象添加到此列表中,并使用Print()方法在循环中打印此对象。

    有人可以帮我处理代码或向我展示有关此界面的文章吗?

    //编辑

    感谢。我仍然对两件事情感到困惑。这是我的代码:

    Person.cs

    class Person : IPrintable
    {
        public string FirstName;
        public string LastName;
    
        public Person(string FirstName, string LastName)
        {
            this.FirstName = FirstName;
            this.LastName = LastName;
        }
    
        public override string ToString()
        {
            return this.FirstName + " " + this.LastName;
        }
    
    
    }
    

    Student.cs

    class Student : Person
    {
        public int ID;
    
        public Student(string FirstName, string LastName, int ID) : base(FirstName, LastName)
        {
            this.ID = ID;
        }
    
        public override string ToString()
        {
            return base.ToString() + " [" + this.ID + "]";
        }
    }
    

    Program.cs的

    class Program
    {
        static void Main(string[] args)
        {
            Person o = new Student("John", "Smith", 231312); 
            Console.Write(o.ToString());
    
            return;
        }
    }
    

    我还有IPrintable.cs

    interface IPrintable
    {
        void Print();
    }
    

    我应该在哪里放置Print()函数来从Person和Student类访问它?我不知道如何使“类对象学生分配给IPrintable类型的变量”。

    我认为它会像:

    IPrintable x = new Student("x", "x", 2231); 
    

    但是如何让它发挥作用?

1 个答案:

答案 0 :(得分:1)

IPrintable不是C#中包含的接口;你应该自己做。它看起来像这样:

public interface IPrintable {
    void Print();
}

因此,您应该阅读一般的接口,使用类实现接口的结果,以及多态(将对象引用分配给更通用类型的变量)。

回答您的编辑:正如编译器可能告诉您的那样,Person必须包含public void Print()方法,因为该类实现了IPrintableStudent不必拥有一个,因为它继承了Person中的一个,但如果您想要以不同方式打印Student,则需要覆盖那里的方法,public override void Print()

确实,您最后的代码片段是他们要求的。怎么样似乎不起作用?

另外:请仔细阅读我提到的主题。不仅仅是编译器接受IPrintable x = new Student("x", "x", 2231);而感到满意,而是努力理解实际发生的事情(该单行做了三件事:实例化一个新的Student对象,创建一个新的IPrintable变量,然后将对象分配给变量),为什么这样做是合法的,例如,做什么是不同的Person x = new Student("x", "x", 2231);,以及为什么Student x = new Person("x", "x");不合法。这里涉及的所有规则背后都有坚实的逻辑,但是很多教师都很遗憾地忽略了这一点并专注于语法(同时在学生身上输入太多语法......)