先看下面一段代码:
public class TestA
{
public int id;
public class TestB
{ }
private class TestC
{ }
}
由上面的代码可以看出类TestA中定义了TestB,TestC. 那么TestB,TestC就是今天要说的内部类型。
内部类型,也叫嵌套类型,Java,C++中都有定义。那么该类型有什么用呢?我觉得至少在C#中没有很大实际意义。
以上面代码为例,下面是测试代码:
TestA a = new TestA();
TestA.TestB b = new TestA.TestB();
你不能写下面的代码
a.TestB b=new TestB();//实例显然不能引用访问类型
TestA.TestC c = new TestA.TestC(); //private的关键字决定了TestC对外的不可见。
由此看来内部类型的定义是给外部类用的,或者说对外表明TestB属于TestA。如果这么说,从逻辑意义上完全说的通。但从实现上,不这么做完全也没问题。
在.NET中,我们可以通过程序集,名字空间,修饰符等等方式来组织代码和程序的逻辑组织结构,这完全可以取代逻辑意义上“TestB属于TestA”。比如如下代码:
namespace Niyw.Test
{
public class TestA
{
public int id;
public class TestB
{ }
private class TestC
{ }
}
}
namespace Niyw
{
public class User
{
public void Test()
{
Test.TestA A = new Test.TestA();
Test.TestA.TestB b = new Test.TestA.TestB();
}
}
}
这样子与内部类的效果一样。
那么为什么.NET中要包含内部类型呢,我想除了逻辑上的意义外,更多的还是微软保留了一种编码习惯。