2015-11-16 39 views
-1

我在使用IPrintable接口时遇到了一些问题。如何使用IPrintable界面?

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

  1. 类对象者分配给类型Person的可变
  2. 分配给类型Person的可变
  3. Class对象学生
  4. 分配给Student类型的可变
  5. Class对象学生
  6. 类对象学生分配到的可变type IPrintable

接下来,我必须创建IPrintable对象列表并将添加到此列表中的所有已创建的对象和pr使用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类中进行访问?我不知道如何创建一个“Class object Student分配给IPrintable类型的变量”。

我认为,这将是这样的:

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

但如何使其工作?

回答

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);并不满足,但是需要了解实际发生的事情(该单行执行三个不同的操作:实例化一个新的对象,创建一个新的IPrintable变量,然后将该对象分配给该变量) ,为什么这样做是合法的,差别在于做什么,例如Person x = new Student("x", "x", 2231);,以及为什么Student x = new Person("x", "x");不合法。在这里涉及的所有规则背后都有坚实的逻辑,但是许多教师不情愿地将这一点掩盖起来,只关注语法(并且同时将太多的语法推到学生身上......)

+1

谢谢非常。你的回答帮了我很多。 “ ”但很多教师伤心地忽略了这一点,只关注语法(同时把太多的语法推到学生身上......)“ 你是对的 – user3364397