2011-06-08 72 views
1

我正在学习C#中的用户控件,所以基本上我有一个叫做Books的类。在这个类中我有一个静态方法public static string[] GetBooks(),这个方法返回书名。简单程序的C#问题

public static string[] GetBooks() 
{ 
    return myBookList.ToArray(); 
} 

现在我有一个UserControl,我放在DataGrid,我希望能够像做dataGrid.DataSource = Books.GetBooks();

问题是,intellisense没有得到.GetBooks(),我认为这是因为它是静态的,我想保持静态。我该如何做到这一点,以及在哪里做这个电话最好的地方?我假设在ascx的behing代码文件中?

+1

myBookList声明在哪里?它也是静态的吗? – brien 2011-06-08 19:34:05

+0

是的,它是私人静态列表 myBookList; – user710502 2011-06-08 19:56:26

回答

4

问题是智能感知没有得到.GetBooks(),我认为这是因为它是静态的,我想保持静态。

为什么?这种方法是否是静态的,也就是说,假设Books的所有实例共享相同的底层Book数据是否合理?如果不是,那么它不应该是静态的。

如果它应该是静态的,那么你需要引用它,像这样(而不是使用实例引用)

var books = Books.GetBooks(); 

我假设你有这样的事情现在:

var b = new Books(); 
var books = b.GetBooks(); // Won't work, as GetBooks is static, not an instance method 
+0

我完全理解,但如果它坚持保持静态,尽管它没有任何意义呢?我怎样才能打电话给它,也应该从ascx文件的.cs中调用它吗?图书类是在App_Code – user710502 2011-06-08 19:35:28

+0

*“如果坚持让它保持静态,但它没有意义呢?”*我真的不知道如何回答这个问题,或者什么时候会这样。为什么它会被迫成为静态的? – 2011-06-08 19:45:54

1

如果它是静态的,并且是以发布的方式进行的,即Books.GetBooks(),则检查该类和后面的代码是否位于相同的名称空间中,或者是否声明使用它。还要确保课堂图书是公开的。如果它在App_Code中,请在属性中设置Build Action = Compile。