A类如何根据B类的行为从列表中删除该项?

时间:2017-05-25 18:17:41

标签: c# list delegates

问题:

借阅图书时,图书馆会自动知道和         将其从列表中删除。

代码(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;
    }
}

您好我花了很多时间来解决这个问题,但我根本不知道。


我需要使用委托活动吗?如果我使用委托事件,图书馆如何知道要删除哪个项目?
我不熟悉代表。我用Google搜索,但我仍然无法理解如何在此问题中使用委托。
或者这个问题可以在没有委托或事件的情况下以其他方式解决?

2 个答案:

答案 0 :(得分:1)

你是正确的方式。以下是如何使用event和delegate解决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);
    }
}

答案 1 :(得分:0)

在这里查看装饰器设计模式:http://www.dofactory.com/net/decorator-design-pattern。向下滚动到“真实世界代码”。我相信如果没有代表的要求,这将有所帮助。