包含类型是在另一个对象中做数据成员的对象类型;
嵌套类型是一个类完整的包含了在另一个类;
前面我们说可以利用传递参数达到静态成员调用非静态成员的效果.那么今天我们说的包含类型则可以将一个类中的数据成员定义为从另一个类中派生出来的对象.例如,
public class A //创建一个类,下面类中我们会创建一个他这个类型的私有变量 { private string val1; //创建一个私有变量 public A(string str) //定制一个构造函数 { val1 = str; //为它赋上传进来的值 } public string Val1 //定制一个属性 { get { return val1; } set { val1 = value; } } } public class B //这个类将会使用上面类创建一个私有变量 { private A bval1; //================看见这行没,注意哦============= //属性,注意看到这里,这个属性的类型就是上一个类 A public A Bval1 { get { return bval1; } set { bval1 = value; } } //下面这个方法也一样,返回类型是上一个类 A public A Geta() { return new A("嘻嘻哈哈呵呵嘿嘿"); } } |
上面这两类,使用起来也是异常的简单,不过还是最好用断点调试来看,使用如下:
B b = new B(); b.Bval1 = new A("参数"); //实例化一个对象去交给b的一个属性 Console.WriteLine(b.Bval1.Val1); //使用对象 b //再来一个效果, A a = b.Geta(); //调用对象 b 的Geta方法来返回一个 A类型的对象 Console.ReadLine(); |
嵌套类型可访问被包含类型的私有成员和受保护的成员(包括所有继承的私有成员或受保护的成员)。若要访问外部类,请将其作为构造函数传递给嵌套类型。语法示例如下:
class Container { public class Nested {
} } |
来看一个嵌套类的实例
public class Comp //定义一个计算机大类 { public string Name {//计算机类的一个属性 get; set; } //下面这是被嵌套的类 public class cod //定义一个编程的类,被嵌套在comp类中 { private string use; //定义一个私有变量
public cod(string name) //为被嵌套类创建一个构造函数 { use = name; } public string Use //为被嵌套类创建一个属性 { get { return use; } set { use = value; } } public string codf(string name) //为被嵌套类创建一个方法 { return "我现在用的是" + name; } public static string aa(int i) //为被嵌套类创建一个静态方法 { return "一共有" + i + "种语言"; } }//被嵌套的cod类结束 } //控制台应用程序的起始类 class Program { static void Main(string[] args) {//使用上面的两个类 Comp.cod cc = new Comp.cod(".net/c#"); //创建一个嵌套类的实例 Console.WriteLine(cc.Use); //访问被嵌套类中的属性 Console.WriteLine(cc.codf(".Net/c#")); //使用被嵌套类的方法 Console.WriteLine(Comp.cod.aa(30)); //使用被嵌套类的静态方法 } } |
还给你留了个作业来完成,就是用嵌套类型去访问它外部类中的成员。上面有说,但是说得比较模糊,自己做做看。实在做不出来,可以看下下面示例:
public class Container //外部类 { public class Nested //被嵌套类 { private Container m_parent; //外部类类型的变量
public Nested(Container parent) //构造函数参数是外部类类型 { m_parent = parent; //这句是啥意思? } } } |
下面继续讨论匿名类型。
本文章为天轰穿原创作品,转载请注明出处及作者。