3

C#4.0(または実行可能な場合はそれ以前)では、親クラスはそれ自体の参照を子クラスにどのように渡しますか。例えば:

class Book
{

    public string bookname = "a";
    public static List<Page> pages = new List<Page>();

    static void Main(string[] args)
    {
        Page pageone = new Page("one");
        pages.Add(new Page("one"));
    }
}
public class Page
{
    Book book;
    public Page(string pagetitle)
    {
        Console.WriteLine(pagetitle);
        Console.WriteLine("I'm from bookname :?");
    }
}

Pageにどの本が入っているかを認識させるにはどうすればよいですか?コンストラクターでBookクラスを渡そうとしていますが、方法がわかりません。

4

2 に答える 2

7

ブッククラスをアプリケーションのエントリポイントにしたため、問題が発生しています。つまり、実際のブックインスタンスがありません。

代わりに次のようなものを試してください。

public class Program
{
    static void Main(string[] args)
    {
        Book book1 = new Book();
        book1.AddPage("one");   
    }
}

public class Book
{
    public string Bookname = "a";
    public List<Page> Pages = new List<Page>();

    public void AddPage(string pageTitle)
    {
        Pages.Add(new Page(this, pageTitle));
    }
}

public class Page
{
    Book book;
    public Page(Book b, string pagetitle)
    {
        book = b;
        Console.WriteLine(pagetitle);
        Console.WriteLine("I'm from book '{0}'.", book.Bookname);
    }
}
于 2011-10-08T01:13:50.610 に答える
4

にフィールドを追加するだけBookですPage class

次に、Book引数を取るオーバーロードを作成します。

からコンストラクターを呼び出すときthisに参照するために使用しますBook objectBook class

private Book _book;
public Page(Book book, string pagetitle);
{
   this._book = book
}

// Usage in the Book class
Page pageone = new Page(this, "one");
于 2011-10-08T01:03:46.123 に答える