title: Why doesn't C# have package private?
body: <p>I'm learning C# and coming from a Java world, I was a little confused to see that C# doesn't have a "package private". Most comments I've seen regarding this amount to "You cannot do it; the language wasn't designed this way". I also saw some workarounds that involve <code>internal</code> and <code>partial</code> along with comments that said these workarounds go against the language's design.</p>
  
  <p>Why was C# designed this way? Also, how would I do something like the following: I have a <code>Product</code> class and a <code>ProductInstance</code> class. The only way I want a <code>ProductInstance</code> to be created is via a factory method in the <code>Product</code> class. In Java, I would put <code>ProductInstance</code> in the same package as <code>Product</code>, but make its constructor <code>package private</code> so that only <code>Product</code> would have access to it. This way, anyone who wants to create a <code>ProductInstance</code> can only do so via the factory method in the <code>Product</code> class. How would I accomplish the same thing in C#?</p>