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

保護された内部:アクセスは、現在のアセンブリまたは含まれているクラスから派生したタイプに制限されます。

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

于 2012-05-31T13:03:17.993 に答える