This question already has an answer here:
-
Why are C# interface methods not declared abstract or virtual?
6 answers
What is the access modifier of interface
methods? It should be public
or protected
because you have access to them when you implement them (which makes sense). It also should be abstract
because they don't have implementation. But lately I've been reading a book called CLR Via C# and the chapter about interfaces says the following
The CLR requires that interface
methods be marked as virtual
. If you do not explicitly mark the method as virtual
in your source code, the compiler marks the method as virtual
and sealed
.
When you mark the interface
member virtual
compiler complains that the access modifier in not valid. I mean no access modifier is valid for anything in interface
rather than the default one which is given to them by compiler right? Can anyone make it clear for me?
Interfaces (C# Programming Guide)
Interfaces can contain methods, properties, events, indexers, or any
combination of those four member types. For links to examples, see
Related Sections. An interface can't contain constants, fields,
operators, instance constructors, destructors, or types. Interface
members are automatically public, and they can't include any access
modifiers. Members also can't be static.
And about interface members implementation:
To implement an interface member, the corresponding member of the
implementing class must be public, non-static, and have the same
name and signature as the interface member.
So you can't implement an interface member using protected
one.
Don't agree with your comment:
The CLR requires that interface methods be marked as virtual. If you do not explicitly mark the method as virtual in your source code, the compiler marks the method as virtual and sealed.
esp because you mentioned CLR Via C#, I am sure you have mis-read. Bible can not be wrong.
Edit: Providing more details.
As suggested by others, you can not have a access modifier (or virtual) in an interface member.
By default (and by definition) all members inside an Interface are public and abstract.