1.什么是嵌套类型:在类和结构内部定义的类型称为嵌套类型,例如

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

2.不管外部类型是结构还是类。嵌套类型修饰符默认为private,可以设置为其他的修饰符,嵌套类型对外部类型是不可访问的 ,可以设置为public。

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

 3.嵌套类型(或内部类型)可访问包含类型(或外部类型)。若要访问包含类型,请将其作为构造函数传递给嵌套类型,不受外部类的修饰符限制例如:

 public class A
{
private int _a; /*嵌套类 定义*/
private class NestedA
{
public NestedA(A a)
{
a._a = ;
}
}
}

public class Container
{ public class Nested
{
private Container m_parent;
public Nested()
{
}
public Nested(Container parent)
{
m_parent=parent;
}
}
}

public class A
{
private static int _AInt;
private int _instanceInt;
private static void AMethod()
{
Console.WriteLine(_AInt);
}
public void SayIt()
{
NestedA.Method(this);
}
/*嵌套类 定义*/
private class NestedA
{
public static void Method(A a)
{
//静态成员
_AInt = ;
AMethod();
//实例成员
a._instanceInt = ;
a.SayIt();
}
}
}
但是外部类只能够访问修饰符为public、internal嵌套类的字段、方法、属性。示例如下:
public class A
{
public static void AMethod()
{
//成功
NestedA.StaticMethod();
//编译报错
NestedA._Int = ; NestedA ins=new NestedA();
//成功
ins.Method();
//编译报错
ins._instanceInt = ;
}
/*嵌套类 定义*/
private class NestedA
{
private static int _Int;
private int _instanceInt;
public static void StaticMethod() { }
public void Method(){}
}
}

继承:

继承类,也就是继承类外部类的类,只能使用父类中嵌套类的public或者internal(同一个程序集合)方法。但是继承类可以再定义一个内嵌类并从继承父类中嵌套类。如:

public class A
{
/*嵌套类 定义*/
protected class Nested
{
protected virtual void BaseNested_Method(){}
}
} public class C : A
{
/*内嵌类 定义*/
protected class C_Nested:Nested
{
protected override void BaseNested_Method()
{
//重写部分
}
}
}

因为C中A中继承,因此C_Nested可以继承Nested类,从而获取重写父嵌套类的机会。但是Nested必须是可继承类及可访问的(非private 、sealed、static)。

嵌套类可以随意外部类的任何数据属性,而外部类访问嵌套类就只能遵守访问修饰符。从这个角度看,嵌套类是外部类的补充,通过嵌套类可以获取更好的封装性,增加外部类的可维护性和可读性。

 

嵌套类型可访问包含类型的私有成员和受保护的成员(包括所有继承的私有成员或受保护的成员)。

在前面的声明中,类 Nested 的完整名称为 Container.Nested。这是用来创建嵌套类的新实例的名称,如下所示:

Container.Nested nest = new Container.Nested();

C#嵌套类型的更多相关文章

  1. Swift2.1 语法指南——嵌套类型

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

  2. swift 学习- 22 -- 嵌套类型

    // 枚举 常备用于为特定的类 或 结构体实现某些功能, 类似的, 枚举可以方便的定义工具类 或 结构体, 从而为某个复杂的类型所使用, 为了实现这种功能, Swift 允许你定义 嵌套类型, 可以在 ...

  3. Swift5 语言指南(二十一) 嵌套类型

    通常创建枚举以支持特定类或结构的功能.类似地,定义纯粹在更复杂类型的上下文中使用的实用程序类和结构可能是方便的.为此,Swift允许您定义嵌套类型,从而在它们支持的类型定义中嵌套支持枚举,类和结构. ...

  4. 4.spring对象的创建(静态工厂 实例工厂 泛型,嵌套类型)

    1.原料类 namespace CreateObjects{    public class GenericClass<T>    { }} PersonDao 类 包含嵌套类型 name ...

  5. C# 字符串操作,可空类型,文档注释,嵌套类型

    字符串 字符串是Unicode字符串数组,且是不可变的 这种操作不会影响到原来的字符串,它会新添加一个副本. 有关Split的操作 using System; using System.Collect ...

  6. Elasticsearch 7.x Nested 嵌套类型查询 | ES 干货

    一.什么是 ES Nested 嵌套 Elasticsearch 有很多数据类型,大致如下: 基本数据类型: string 类型.ES 7.x 中,string 类型会升级为:text 和 keywo ...

  7. 七.Protobuf3 嵌套类型

    Protobuf3 嵌套类型 您可以在其他消息类型中定义和使用消息类型,如下例所示:这里Result消息是在SearchResponse消息中定义的: message SearchResponse { ...

  8. Language Guide (proto3) | proto3 语言指南(六)嵌套类型

    Nested Types - 嵌套类型 您可以在其他消息类型中定义和使用消息类型,如以下示例所示--这里的Result消息是在SearchResponse消息中定义的: message SearchR ...

  9. Swift-----类型转换 、 嵌套类型 、 扩展 、 协议 、 访问控制

    使用is和as操作符判断和转换数组中的对象类型 1.1 问题 类型转换可以判断实例的类型,也可以将实例看做是其父类或者子类的实例.在Swift中使用is和as操作符实现类型转换. 本案例定义一个媒体类 ...

随机推荐

  1. Java中的二维数组

    Java 中的二维数组 所谓二维数组,可以简单的理解为是一种"特殊"的一维数组,它的每个数组空间中保存的是一个一维数组. 那么如何使用二维数组呢,步骤如下: 1. 声明数组并分配空 ...

  2. 知方可补不足~SQL数据库用户的克隆,SQL集群的用户同步问题

    我们知道在为sqlserver建立功能数据库时,通过会为库再建立一个登陆名,而这个登陆名时,只用来管理这个数据库,这是安全的,正确的.

  3. mysql之索引

    一.索引是什么? 比如我们要在字典中找某一字,如何才能快速找到呢?那就是通过字典的目录. 对数据库来说,索引的作用就是给‘数据’加目录. 二.索引算法 设有N条随机记录,不用索引,平均查找N/2次,那 ...

  4. iOS 根据文件名获取到文件路径

    根据文件名来获取文件路径(Document目录下) //根据文件名来获取文件路径 - (NSString *)dataFilePath:(NSString *)sender { NSArray *pa ...

  5. iOS 强制横屏

    // // AAAAViewController.m // hengp // // Created by 朱信磊 on 15/2/13. // Copyright (c) 2015年 niit. Al ...

  6. oracle数据库表空间及归档

    --表空间(TableSpace)是Oracle的开创性理念.表空间使得数据库管理更加灵活,而且极大地提高了数据库性能. --作用 :1.避免磁盘空间突然耗竭的风险 2.规划数据更灵活 3.提高数据库 ...

  7. careercup-排序和查找 11.7

    11.7 有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上.处于实际和美观的考虑,在上面的人要比下面的人矮一点.轻一点.已知马戏团每个人的高度和重量,请编写代码计算叠罗汉最多能叠几个人. ...

  8. PAT 1012

    1012. The Best Rank (25) To evaluate the performance of our first year CS majored students, we consi ...

  9. python列表删除重复元素的三种方法

    给定一个列表,要求删除列表中重复元素. listA = ['python','语','言','是','一','门','动','态','语','言'] 方法1,对列表调用排序,从末尾依次比较相邻两个元素 ...

  10. Fast portable non-blocking network programming with Libevent--转

    Learning Libevent Chapter 0: About this document Chapter 1: A tiny introduction to asynchronous IO. ...