From a C++ background, this came like a surprise in my experience. In C++ it is good practice to create virtual functions private. From http://world wide web.gotw.ca/guides/mill18.htm: "Guideline #2: Would rather make virtual functions private."
I additionally quote Eric Lippert's blog, from http://blogs.msdn.com/b/ericlippert/archive/2010/03/25/knights in combat-knaves-protected-and-internal.aspx: "Private virtual techniques are illegal in C#, which irks me to no finish. I'd totally use which include as we been with them.Inch
I realize that in C#, you would not have the ability to override a personal virtual method inside a derived (although not nested) class. Why the situation? In C++ the access specifier is not related to whether you are able to override a function or otherwise.