title: I'm confused about default access modifier of C# interface members
body: <p>What is the access modifier of <code>interface</code> methods? It should be <code>public</code> or <code>protected</code> because you have access to them when you implement them (which makes sense). It also should be <code>abstract</code> because they don't have implementation. But lately I've been reading a book called <em>CLR Via C#</em> and the chapter about interfaces says the following </p>
  
  <blockquote>
    <p>The CLR requires that <code>interface</code> methods be marked as <code>virtual</code>. If you do not explicitly mark the method as <code>virtual</code> in your source code, the compiler marks the method as <code>virtual</code> and <code>sealed</code>.</p>
  </blockquote>
  
  <p>When you mark the <code>interface</code> member <code>virtual</code> compiler complains that the access modifier in not valid. I mean no access modifier is valid for anything in <code>interface</code> rather than the default one which is given to them by compiler right? Can anyone make it clear for me?</p>