C#嵌套类与无多态性的子类之间的差异
假设C2是C1,我需要C2可以访问M1,C1不能访问M2。如果我不需要多态性,下面的代码是否会做与我在没有嵌套类的情况下做相同的事情,而是使用继承C#嵌套类与无多态性的子类之间的差异,c#,inheritance,nested,inner-classes,C#,Inheritance,Nested,Inner Classes,假设C2是C1,我需要C2可以访问M1,C1不能访问M2。如果我不需要多态性,下面的代码是否会做与我在没有嵌套类的情况下做相同的事情,而是使用继承 class C1 { protected void M1() { \\code class C2 { private void M2() { \\code } } } 您最初的示例在语法上不正确: class C1 { protected void M1() { \\code class
class C1 {
protected void M1() {
\\code
class C2 {
private void M2() {
\\code
}
}
}
您最初的示例在语法上不正确:
class C1 {
protected void M1() {
\\code
class C2 {
private void M2() {
\\code
}
}
}
不能在M1
方法中定义C2
类
您在评论中提出的另一个问题(重新措辞): 为什么我们需要嵌套类呢 a唯一能想到的就是这种情况:
public class C1
{
public void M1()
{
Console.WriteLine($"{this.GetType()}.M1()");
var c2 = new C2();
c2.M2();
}
private class C2
{
public void M2()
{
Console.WriteLine($"{this.GetType()}.M2()");
}
}
}
public class Program
{
public static void Main(string[] args)
{
var c1 = new C1();
c1.M1();
}
}
输出:
ClassesExample.C1.M1()
ClassesExample.C1+C2.M2()
我们有一个私有的
C2
类,只能从C1
内部访问。我不知道我为什么要这样做。但是如果真的需要,那就是使用嵌套类。您不能从嵌套的C2
访问C1.M1
。感觉这是一个糟糕的设计(无意冒犯)。你到底想做什么?这样子类就不能访问父类的字段和方法?实际上它不是“父类”C2
仅位于C1
内部,但它们之间没有关系。您无法在M1
内部定义C2
。只能在M1
旁边的C1
中定义C2
。