2015-11-16 65 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