这是一段代码:
private class myClass
{
public static void Main()
{
}
}
'or'
private class myClass
{
public void method()
{
}
}
我知道,第一个行不通。第二个会。
但为什么首先不起作用?有什么具体原因吗?
实际上从这个角度寻找解决方案,这就是为什么它变得大胆。对不起
这是一段代码:
private class myClass
{
public static void Main()
{
}
}
'or'
private class myClass
{
public void method()
{
}
}
我知道,第一个行不通。第二个会。
但为什么首先不起作用?有什么具体原因吗?
实际上从这个角度寻找解决方案,这就是为什么它变得大胆。对不起
在这种情况下会很有意义;你有一个公共类SomeClass
,你想在里面封装一些只相关的功能SomeClass
。您可以通过在 中声明一个私有类(SomePrivateClass
在我的示例中)来做到这一点SomeClass
,如下所示。
public class SomeClass
{
private class SomePrivateClass
{
public void DoSomething()
{
}
}
// Only SomeClass has access to SomePrivateClass,
// and can access its public methods, properties etc
}
无论SomePrivateClass
isstatic
或 containspublic static
方法,这都是正确的。
我将其称为嵌套类,并在另一个StackOverflow 线程中进行了探索。
Richard Ev 给出了一个在嵌套类中访问的用例。嵌套类的另一个用例是公共接口的私有实现:
public class MySpecialCollection<T> : IEnumerable<T>
{
public IEnumerator<T> GetEnumerator()
{
return new MySpecialEnumerator(...);
}
private class MySpecialEnumerator : IEnumerator<T>
{
public bool MoveNext() { ... }
public T Current
{
get { return ...; }
}
// etc...
}
}
这允许人们提供公共接口或基类的私有(或受保护或内部)实现。消费者不需要知道也不需要关心具体的实现。这也可以在没有嵌套类的情况下通过将MySpecialEnumerator
类设置为内部来完成,因为您不能拥有非嵌套的私有类。
BCL 广泛使用非公共实现。例如,LINQ 运算符返回的对象是实现IEnumerable<T>
.
这段代码在语法上是正确的。但最大的问题是:它是否有用,或者至少在您想要使用它的上下文中可用?可能不是,因为该Main
方法必须在一个public
类中。
Main()
方法是应用程序执行开始的地方,所以你不能编译你的第一个类(用public static void Main()
)是因为你已经Main
在应用程序的其他地方有了方法。编译器不知道从哪里开始执行您的应用程序。
您的应用程序必须只有一种Main
方法可以使用默认行为进行编译,否则您需要在编译时添加/main选项。