The default access modifier for an interface is public. However, in C# can we ever use protected access modifier for an interface?
-
Do you mean the members of the interface, or the interface itself? _Edited_ All declared members of an interface are always public. The accessibility of the interface itself can be `protected` if the interface is nested inside a non-static, non-sealed outer `class`. – Jeppe Stig Nielsen Sep 28 '15 at 12:17
-
as far as I remember, you can't specify a access modifier for the interface members. – Thangadurai Sep 28 '15 at 12:19
-
1look into this: http://stackoverflow.com/questions/516148/why-cant-i-have-protected-interface-members – Anurag Jain Sep 28 '15 at 12:20
-
Sure, you can declare a nested interface protected. Why you'd ever do something like this is hard to guess. – Hans Passant Sep 28 '15 at 12:21
2 Answers
In this example:
class C
{
protected interface I
{
}
}
the nested type I
is protected
.
This means that I
is visible to all of C
and also to all classes that derive from C
. For example this could be used to make protected
instance methods inside C
that contain I
in their signatures or return types.
Note: The default accessibility for an interface is not public
, like you claim. The default accessibility for a member of an interface is public
. That is something else.
The default accessibility for the interface itself depends on what the interface itself is a member of. If the interface is a member of an "outer" class
or struct
(like my C
above), it has the usual default accessibility of class
and struct
members, which is private
. If the interface is a direct member of a namespace
(possibly the global namespace), the default accessibility is the usual default for all non-nested types, which is internal
.

- 60,409
- 11
- 110
- 181
You can change this acceccibility.
See this page : https://msdn.microsoft.com/en-us/library/ms173121.aspx.
It's say that "Interfaces declared directly within a namespace can be declared as public or internal and, just like classes and structs, interfaces default to internal access."
Be carefull, as you see in this link https://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx members are public by default and can't be modified.

- 4,034
- 3
- 19
- 26
-
That page talks about accessibility of *members*, not the interface itself. – Hans Kesting Sep 28 '15 at 12:21
-
This [link](https://msdn.microsoft.com/en-us/library/ms173121.aspx) talks about interfaces and their members. – theB Sep 28 '15 at 12:22