张银的博客


Eat to live, but do not live to eat.

导航

嵌套类型/包含类型

Posted on 2009-01-13 19:45  张银  阅读(995)  评论(1编辑  收藏  举报

嵌套类型:一个类完整的包含在了另一个类
包含类型:在另一个对象中做数据成员的对象

类包含:计算机类中定义一个编程类型的私有成员(而这个编程类型则是另一个全新的类),计算机类(以及所有计算机类的实例成员)包含了编程类。假设计算机类的一个成员定义一个编程类型的一个数据成员时,不能认为是计算机类包含编程类,而是计算机类的一个对象包含编程类的一个对象。
嵌套类型:可访问被包含类型的私有成员和受保护类型(包括继承的私有成员或受保护成员)。

类的包含类型:就是在另一个对象中做数据成员的对象类型

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的方式访问被包含类的属性 

结果:
abc123

在类或结构内部定义的类型称为嵌套类型。例如:

class Container
{
    
class Nested
    {
        Nested() { }
    }
}

不管外部类型是类还是结构,嵌套类型均默认为 private,但是可以设置为 public、protected internal、protected、internal 或 private。在上面的示例中,Nested 对外部类型是不可访问的,但可以设置为 public,如下所示:

class Container
{
    
public class Nested
    {
        Nested() { }
    }
}

嵌套类型(或内部类型)可访问包含类型(或外部类型)。若要访问包含类型,请将其作为构造函数传递给嵌套类型。例如:

public class Container
{
    
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();