class BaseClass {...}
public class MyClass: BaseClass {...} // Error
http://msdn.microsoft.com/en-us/library/cx03xt0t.aspx
This is mentioned in the C# language specification and also this makes perfect sense because in your case the public class can be used in "public" context with public accessibility level allowing the access of a non-public class which is your base class and this would be the wrong behaviour.
According to C# Language Specification 5.0:
(Download the spec from http://www.microsoft.com/en-us/download/details.aspx?id=7029)
The following accessibility constraints exist:
• The direct base class of a class type must be at least as accessible as the class type itself.
• The explicit base interfaces of an interface type must be at least as accessible as the interface type itself.
• The return type and parameter types of a delegate type must be at least as accessible as the delegate type itself.
• The type of a constant must be at least as accessible as the constant itself.
• The type of a field must be at least as accessible as the field itself.
• The return type and parameter types of a method must be at least as accessible as the method itself.
• The type of a property must be at least as accessible as the property itself.
• The type of an event must be at least as accessible as the event itself.
• The type and parameter types of an indexer must be at least as accessible as the indexer itself.
• The return type and parameter types of an operator must be at least as accessible as the operator itself.
• The parameter types of an instance constructor must be at least as accessible as the instance constructor itself.