我遇到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)'
我该如何解决?
答案 0 :(得分:2)
您的Book
课程是内部的,但getListBook
方法是公开的(可能是公共课程)。任何想要访问此公共方法的外部库也需要访问Book
类,但它是内部的,不应该从任何外部库访问。编译器错误通知您这个矛盾。
解决方案是将Book
公开(您已经发现),或者使getListBook
或其父类内部。或者,您可以确保getListBook
的返回类型未引用内部类型,方法是将其更改为返回IList
或List<T>
,其中T
是公共基类Book
或Book
实现的公共接口。
答案 1 :(得分:1)
例外是自我解释的。
您要求公共方法(getListBook)返回内部对象(Book)列表。这是不允许的,因为内部(在程序集onle中可见)比公共(在任何地方都可见)更难访问,因此错误。
请参阅下面的访问修饰符的详细信息。
公开强> 类型或成员可以由同一程序集中的任何其他代码或引用它的另一个程序集访问。
<强>私有强> 只能通过相同类或结构中的代码访问类型或成员。
<强>保护强> 类型或成员只能由同一个类或结构中的代码访问,或者在从该类派生的类中访问。
<强>内部强> 类型或成员可以由同一程序集中的任何代码访问,但不能从另一个程序集访问。