3

这有什么问题?:

public abstract class EFNLBaseRepository:IDisposable
{

    NLSubscriberDBContext _dbContext;
    protected internal NLSubscriberDBContext dbContext
    {
     get
      {...}

    }
...
}


internal class NLSubscriberDBContext : DbContext
{
  ...
}

当然,这两个类都在同一个程序集中。这是我得到的编译错误:

错误 1 ​​可访问性不一致:属性类型 'NLSubscriber.Core.Service.Repository.EFDAL.NLSubscriberDBContext' 比属性 'NLSubscriber.Core.Service.Repository.EFDAL.EFNLBaseRepository.dbContext' C:\Data\Projects\Neticon\TFS 更难访问\NLSubscriber - Newsletter\NLSubscriber-newsletter\NLSubscriber.Core\Service\Repository\EFDAL\EFNLBaseRepository.cs 12 50 NLSubscriber.Core

4

3 回答 3

2

protected internal允许所有子类访问该属性,即使子类位于 DLL 之外。这与 属性的类型不一致internal,因为它需要外部的子类才能访问内部类型。

考虑这个例子:我EFNLBaseRepository从你的 DLL 外部子类化

public sealed EFNLSealedRepository : EFNLBaseRepository {
    public DoSomething() {
        // Access to dbContext should be allowed, because it is protected;
        // However, NLSubscriberDBContext should not be accessible.
        // This is an inconsistency flagged by the C# compiler.
        NLSubscriberDBContext context = dbContext;
    }
}
于 2012-05-31T12:57:24.827 回答
0

问题是另一个程序集可以固有EFNLBaseRepository该类,并且这种情况internal使得派生类更难访问它。因为那个冲突编译器不允许它。

于 2012-05-31T12:58:04.040 回答
0

protected internal :访问仅限于当前程序集从包含类派生的类型。

http://msdn.microsoft.com/en-us/library/ba0a1yw2(v=VS.80).aspx

于 2012-05-31T13:03:17.993 回答