If I declare an interface, or a type as private in one file, is it private to that file or the namespace?
The compiler generates an error for File2: ‘Error 14 Inconsistent accessibility: parameter type ‘DIDemo1.IImageRepository’ is less accessible than method ‘DIDemo1.ImageGetter.ImageGetter(DIDemo1.IImageRepository)’
What I don’t understand is that MyClass can use the interface but ImageGetter class cannot.
File1:
namespace DIDemo1 {
interface IImageRepository {
Image[] GetImages();
}
public class MyClass : IImageRepository {
#region IImageRepository Members
public Image[] GetImages() {
return new Image[] { };
}
#endregion
}
}
File2:
namespace DIDemo1 {
public class ImageGetter {
IImageRepository _repo;
public ImageGetter(IImageRepository repository) {
_repo = repository;
}
public Image[] GetImages() {
return _repo.GetImages();
}
}
}
ImageGetter can use the interface, it just can’t present it in one of its method signatures which are more accessible. Likewise if MyClass tried to use it in one of its method signatures you’d get the same error. Read below.
Top level interfaces, structs, and classes default to
internalaccess. To fix your problem putpublicbefore your interface declaration.internaltypes in C# are accessible only within the same assembly.You can’t use a more restrictive access modifier in a less restrictive signature for obvious reasons. (How could someone who can’t access the more restrictive type call the function for example?)