<p>I'm a pretty new C# and .NET developer. I recently created an MMC snapin using C# and was gratified by how easy it was to do, especially after hearing a lot of horror stories by some other developers in my organisation about how hard it is to do in C++.</p>
<p>I pretty much went through the whole project at some point and made every instance of the &quot;public&quot; keyword to &quot;internal&quot;, except as required by the runtime in order to run the snapin. What is your feeling on this, should you generally make classes and methods public or internal?</p>

I believe in blackboxes where possible. As a programmer, I want a well defined blackbox which I can easily drop into my systems, and have it work. I give it values, call the appropriate methods, and then get my results back out of it.
To that end, give me only the functionality that the class needs to expose to work.
Consider an elevator. To get it to go to a floor, I push a button. That's the public interface to the black box which activates all the functions needed to get the elevator to the desired floor.