嵌套类型:一个类完整的包含在了另一个类
包含类型:在另一个对象中做数据成员的对象
类包含:计算机类中定义一个编程类型的私有成员(而这个编程类型则是另一个全新的类),计算机类(以及所有计算机类的实例成员)包含了编程类。假设计算机类的一个成员定义一个编程类型的一个数据成员时,不能认为是计算机类包含编程类,而是计算机类的一个对象包含编程类的一个对象。
嵌套类型:可访问被包含类型的私有成员和受保护类型(包括继承的私有成员或受保护成员)。
类的包含类型:就是在另一个对象中做数据成员的对象类型
public class aaa //创建一个类,下面类中我们会创建一个他这个类型的私有变量
{
private string val1; //创建一个私有变量
public aaa(string str) //定制一个构造函数
{
val1=str; //为他赋上传进来的值
}
public string Val1
{
get
{ return val1; }
set
{ val1=value; }
}
}
public class bbb //这个类将会使用上面类创建一个私有变量
{
private aaa bval1; //注意,我们定制了一个类型为aaa的私有变量
public bbb()
{
}
public aaa Bval1 //属性,返回的类型是aaa
{
get
{ return bval1; }
set
{ bval1=value; }
}
}
protected void Page_Load(object sender, EventArgs e)
{
bbb bb=new bbb(); //我们利用第二个类创建了一个实例
bb.Bval1=new aaa("abc123"); //这里有点怪,其实也不怪
Response.Write(bb.Bval1.Val1); //通过bb.Bval1.Val1的方式访问被包含类的属性
}
{
private string val1; //创建一个私有变量
public aaa(string str) //定制一个构造函数
{
val1=str; //为他赋上传进来的值
}
public string Val1
{
get
{ return val1; }
set
{ val1=value; }
}
}
public class bbb //这个类将会使用上面类创建一个私有变量
{
private aaa bval1; //注意,我们定制了一个类型为aaa的私有变量
public bbb()
{
}
public aaa Bval1 //属性,返回的类型是aaa
{
get
{ return bval1; }
set
{ bval1=value; }
}
}
protected void Page_Load(object sender, EventArgs e)
{
bbb bb=new bbb(); //我们利用第二个类创建了一个实例
bb.Bval1=new aaa("abc123"); //这里有点怪,其实也不怪
Response.Write(bb.Bval1.Val1); //通过bb.Bval1.Val1的方式访问被包含类的属性
}
结果:
abc123
在类或结构内部定义的类型称为嵌套类型。例如:
class Container
{
class Nested
{
Nested() { }
}
}
{
class Nested
{
Nested() { }
}
}
不管外部类型是类还是结构,嵌套类型均默认为 private,但是可以设置为 public、protected internal、protected、internal 或 private。在上面的示例中,Nested 对外部类型是不可访问的,但可以设置为 public,如下所示:
class Container
{
public class Nested
{
Nested() { }
}
}
{
public class Nested
{
Nested() { }
}
}
嵌套类型(或内部类型)可访问包含类型(或外部类型)。若要访问包含类型,请将其作为构造函数传递给嵌套类型。例如:
public class Container
{
public class Nested
{
private Container m_parent;
public Nested()
{
}
public Nested(Container parent)
{
m_parent = parent;
}
}
}
{
public class Nested
{
private Container m_parent;
public Nested()
{
}
public Nested(Container parent)
{
m_parent = parent;
}
}
}
嵌套类型可访问包含类型的私有成员和受保护的成员(包括所有继承的私有成员或受保护的成员)。
在前面的声明中,类 Nested 的完整名称为 Container.Nested。这是用来创建嵌套类的新实例的名称,如下所示:
Container.Nested nest = new Container.Nested();