内部错误?

时间:2014-03-20 07:00:36

标签: c#

我遇到internal

的问题
internal class Book
{
    [Column(DbType = "INT NOT NULL Identity", IsDbGenerated = true, CanBeNull = false, IsPrimaryKey = true)]
    public int ID
    {
        get;
        set;
    }
    [Column(CanBeNull = false)]
    public int BookName
    {
        get;
        set;
    }
}

在另一堂课:

public IList<Book> getListBook(int ID)
   {
   IList<Book> lstData = null;
   ...
   return lstData ;
 }

如果将internal替换为public。这没问题。 但如果将class设置为internal,则会出现如下错误:

Error 3 Inconsistent accessibility: return type 'System.Collections.Generic.IList<ABC.Book>'
 is less accessible than method 'Project.ClassName.getListBook(int)'

我该如何解决?

2 个答案:

答案 0 :(得分:2)

您的Book课程是内部的,但getListBook方法是公开的(可能是公共课程)。任何想要访问此公共方法的外部库也需要访问Book类,但它是内部的,不应该从任何外部库访问。编译器错误通知您这个矛盾。

解决方案是将Book公开(您已经发现),或者使getListBook或其父类内部。或者,您可以确保getListBook的返回类型未引用内部类型,方法是将其更改为返回IListList<T>,其中T是公共基类BookBook实现的公共接口。

答案 1 :(得分:1)

例外是自我解释的。

您要求公共方法(getListBook)返回内部对象(Book)列表。这是不允许的,因为内部(在程序集onle中可见)比公共(在任何地方都可见)更难访问,因此错误。

请参阅下面的访问修饰符的详细信息。

公开 类型或成员可以由同一程序集中的任何其他代码或引用它的另一个程序集访问。

<强>私有 只能通过相同类或结构中的代码访问类型或成员。

<强>保护 类型或成员只能由同一个类或结构中的代码访问,或者在从该类派生的类中访问。

<强>内部 类型或成员可以由同一程序集中的任何代码访问,但不能从另一个程序集访问。