2017-05-25 35 views
0

問:類A如何根據B類的行爲從列表中刪除項目?

當一本書借,圖書館就會知道自動和 從列表中刪除。

代碼(C#):

public class Library 
{ 
    public string Name { get; set; } 
    public List<Book> BookList { get; set; } 

    public Library() 
    { 
     BookList = new List<Book>(); 
     BookList.Add(new Book("HR")); 
     BookList.Add(new Book("HR")); 
     BookList.Add(new Book("Tiger")); 
     BookList.Add(new Book("Lion")); 
     BookList.Add(new Book("Elephant")); 
    } 
} 

public class Book 
{ 
    public string Name { get; set; } 
    public Book(string name) 
    { 
     Name = name; 
    } 
} 

您好我花了很多時間來解決這個問題,但我不知道的。


我是否需要使用委託事件?如果我使用委託事件,庫如何知道要刪除哪個項目?
我對代表不熟悉。我搜索了一下,但我仍然不明白如何在這個問題中使用委託。
或者這個問題可以通過其他方式解決而無需委託或事件?

+2

動物類的目的是什麼?你的動物借書嗎? – Sybren

+0

這個問題prolly假定圖書館有一個 「借用」方法來處理這個問題。以書籍的實例作爲參數。爲什麼圖書館的構造者只拿一本書? – user6144226

+0

@Sybren我編輯了這個問題。 – sky91

回答

1

你是對的。這裏是一個示例如何解決您的事件和委託requiremtns:

public class Library 
{ 
    public string Name { get; set; } 
    public List<Book> BookList { get; set; } 

    public Library() 
    { 
     string[] books = new string[5] { "HR", "HR", "Tiger","Lion", "Elephant" }; 

     BookList = new List<Book>(); 

     foreach (string s in books) { 
      Book b = new Book(s); 
      b.borrowed += borrowed; 
      BookList.Add(b); 
     } 
    } 

    private void borrowed(Book b) 
    { 
     BookList.Remove(b); 
    } 
} 

public class Book 
{ 
    public delegate void BorrowedEventHandler(Book b); 
    public event BorrowedEventHandler borrowed; 

    public string Name { get; set; } 
    public Book(string name) 
    { 
     Name = name; 
    } 

    public void borrow() 
    { 
     borrowed(this); 
    } 
} 
+0

謝謝。這是工作。 – sky91

相關問題