这里是一段代码:
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
相关的功能。你可以通过在SomeClass
内声明一个私有类(在我的示例中为SomePrivateClass
)来实现这一点,如下所示。
public class SomeClass
{
private class SomePrivateClass
{
public void DoSomething()
{
}
}
// Only SomeClass has access to SomePrivateClass,
// and can access its public methods, properties etc
}
无论SomePrivateClass
是static
还是包含public static
方法,这都是正确的。
我会称之为嵌套类,在另一个StackOverflow线程中有详细探讨。
DoSomething
可以被什么访问? - FrederickSomePrivateClass
实例的SomeClass
内部内容都可以调用该实例上的DoSomething
方法。 - Richard EvRichard 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
类设置为内部类来完成,因为您无法拥有非嵌套的私有类。IEnumerable<T>
的非公共类。这段代码在语法上是正确的。但是最重要的问题是:它是否有用,或者至少在你想使用它的上下文中可用?可能不是,因为 Main
方法必须在一个 public
类中。
Main()
方法是应用程序执行的起点,所以你无法编译你的第一个类(带有 public static void Main()
)是因为你的应用程序中已经有了其他地方的 Main
方法。编译器不知道从哪里开始执行你的应用程序。
你的应用程序必须只有一个 Main
方法才能使用默认行为进行编译,否则你需要在编译时添加 /main 选项。