2013-07-25 13 views
5

mam interfejs i streszczenie klasy podstawy określonej w tym samym zespole:wewnętrzny interfejs * mniej * dostępne niż wewnętrzny chroniony konstruktor?

IFoo.cs:

internal interface IFoo { ... } 

Base.cs:

public abstract class Base 
{ 
    internal protected Base(IFoo foo) { ... } 
} 

Wytwarza następujący błąd kompilatora:

CS0051: Inconsistent accessibility: parameter type 'IFoo' is less 
     accessible than method 'Base.Base(IFoo)' 

Jeśli sprawię, że konstruktor klasy Base będzie tylko wewnętrzny, błąd zniknie. Ponieważ klasa jest abstrakcyjna, może dodanie zabezpieczonej do niej dostępności nic nie daje ...

Nadal nie rozumiem błędu. MSDN definiuje „chronione wewnętrznego” jako

"Access is limited to the current assembly or types derived from the containing class"

Jak to wewnętrzna IFoo interfejs mniej dostępne niż wewnętrznego konstruktora chronione?

Odpowiedz

8

This MSDN page definicją „chronione wewnętrznego” jako (podkreślenie od oryginału):

The protected internal accessibility level means protected OR internal, not protected AND internal. In other words, a protected internal member can be accessed from any class in the same assembly, including derived classes. To limit accessibility to only derived classes in the same assembly, declare the class itself internal, and declare its members as protected.

Więc innymi słowy, typy spoza obecnego zespołu, które wywodzą się z Base miałyby dostęp do Base(IFoo foo) ale nie mieliby dostęp do IFoo, ponieważ jest wewnętrzny. Tak więc błąd.

+0

Bardzo dobre, zwięzłe wyjaśnienie tego. – Lemonseed

Powiązane problemy