嵌套类型/包含类型

时间:2022-08-07 15:40:31

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

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

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

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();