Here is a piece of code:
private class myClass
{
public static void Main()
{
}
}
'or'
private class myClass
{
public void method()
{
}
}
I know, first one will not work. And second one will.
But why first is not working? Is there any specific reason for it?
Actually looking for a solution in this perspective, thats why made it bold. Sorry
Richard Ev gave a use case of access inside a nested classes. Another use case for nested classes is private implementation of a public interface:
This allows one to provide a private (or protected or internal) implementation of a public interface or base class. The consumer need not know nor care about the concrete implementation. This can also be done without nested classes by having the
MySpecialEnumerator
class be internal, as you cannot have non-nested private classes.The BCL uses non-public implementations extensively. For example, objects returned by LINQ operators are non-public classes that implement
IEnumerable<T>
.It would be meaningful in this scenario; you have a public class
SomeClass
, inside which you want to encapsulate some functionality that is only relevant toSomeClass
. You could do this by declaring a private class (SomePrivateClass
in my example) withinSomeClass
, as shown below.This holds true regardless of whether
SomePrivateClass
isstatic
, or containspublic static
methods.I would call this a nested class, and it is explored in another StackOverflow thread.
This code is syntactically correct. But the big question is: is it useful, or at least usable in the context where you want to use it? Probably not, since the
Main
method must be in apublic
class.Main()
method is where application execution begin, so the reason you cannot compile your first class (withpublic static void Main()
) is because you already haveMain
method somewhere else in your application. The compiler don't know where to begin execute your application.Your application must have only one
Main
method to compile with default behavior otherwise you need to add /main option when you compile it.