2011-10-08 27 views
2

在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 :?"); 
    } 
} 

如何让页面识别出哪本书在?我试图在构造函数中传递Book类,但不知道如何。

+0

C#和大多数面向对象的语言,我知道有没有父类和子类的概念。毫不奇怪,没有内置的机制可以将对父实例的引用传递给子实例。 –

+0

@JohnSaunders实际上,Java内部类正是那种关系模型。尽管你可以很容易地用C#修复它 - 毕竟只是一点糖语法。 – Voo

+0

@Voo,这就是我来自的地方......但C#嵌套了类,而不是内部类。见http://blogs.msdn.com/b/oldnewthing/archive/2006/08/01/685248.aspx – Eugene

回答

5

你遇到麻烦的构造函数时,因为你做了你的书类的入口点,您的应用程序,这意味着你不没有一个实际的Book实例。

尝试这样代替:

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); 
    } 
} 
+0

我不应该让这个类的入口点.. 。 – Eugene

4

只是在Pageclass

增加一个字段为Book然后创建一个重载需要书的说法。

使用this引用Bookobject调用从Bookclass

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

// Usage in the Book class 
Page pageone = new Page(this, "one"); 
+0

这个关键字是不允许的,说VS2010给我:( –