C# 嵌套 classes 与没有多态性的子 class 之间的区别
C# Difference between Nested classes vs child class without Polymorphism
假设 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 C2 {
private void M2() {
\code
}
}
}
您不能在 M1
方法中定义 C2
class。
您在评论中提出的另一个问题(改写):
Why do we need nested classes at all?
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
class,只能从 C1
内部访问。我不知道我为什么要这样做。但是如果真的需要的话,那就是嵌套class.
的用法
假设 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 C2 {
private void M2() {
\code
}
}
}
您不能在 M1
方法中定义 C2
class。
您在评论中提出的另一个问题(改写):
Why do we need nested classes at all?
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
class,只能从 C1
内部访问。我不知道我为什么要这样做。但是如果真的需要的话,那就是嵌套class.