C#嵌套类型
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#嵌套类型的更多相关文章
- Swift2.1 语法指南——嵌套类型
原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...
- swift 学习- 22 -- 嵌套类型
// 枚举 常备用于为特定的类 或 结构体实现某些功能, 类似的, 枚举可以方便的定义工具类 或 结构体, 从而为某个复杂的类型所使用, 为了实现这种功能, Swift 允许你定义 嵌套类型, 可以在 ...
- Swift5 语言指南(二十一) 嵌套类型
通常创建枚举以支持特定类或结构的功能.类似地,定义纯粹在更复杂类型的上下文中使用的实用程序类和结构可能是方便的.为此,Swift允许您定义嵌套类型,从而在它们支持的类型定义中嵌套支持枚举,类和结构. ...
- 4.spring对象的创建(静态工厂 实例工厂 泛型,嵌套类型)
1.原料类 namespace CreateObjects{ public class GenericClass<T> { }} PersonDao 类 包含嵌套类型 name ...
- C# 字符串操作,可空类型,文档注释,嵌套类型
字符串 字符串是Unicode字符串数组,且是不可变的 这种操作不会影响到原来的字符串,它会新添加一个副本. 有关Split的操作 using System; using System.Collect ...
- Elasticsearch 7.x Nested 嵌套类型查询 | ES 干货
一.什么是 ES Nested 嵌套 Elasticsearch 有很多数据类型,大致如下: 基本数据类型: string 类型.ES 7.x 中,string 类型会升级为:text 和 keywo ...
- 七.Protobuf3 嵌套类型
Protobuf3 嵌套类型 您可以在其他消息类型中定义和使用消息类型,如下例所示:这里Result消息是在SearchResponse消息中定义的: message SearchResponse { ...
- Language Guide (proto3) | proto3 语言指南(六)嵌套类型
Nested Types - 嵌套类型 您可以在其他消息类型中定义和使用消息类型,如以下示例所示--这里的Result消息是在SearchResponse消息中定义的: message SearchR ...
- Swift-----类型转换 、 嵌套类型 、 扩展 、 协议 、 访问控制
使用is和as操作符判断和转换数组中的对象类型 1.1 问题 类型转换可以判断实例的类型,也可以将实例看做是其父类或者子类的实例.在Swift中使用is和as操作符实现类型转换. 本案例定义一个媒体类 ...
随机推荐
- Open War I: 怪物繁殖,行走仿真,瞄准射击...
See below demo: Share the source codes with your guys. >>>download this "hacking meat& ...
- Stage3D学习笔记(二):使用GPU绘制一个三角形
我们需要使用到Adobe自家提供的AGALMiniAssembler代码类,可以在网下进行下载: 关于AGAL的入门知识可以参考下面的文章: AGAL介绍系列文章(第一部分)AGAL介绍系列文章(第二 ...
- java Swing图形化界面
学过java的人应该对java的图形化界面很是反感,特别是接触java不久的人.如果想和其他语言那样用鼠标拖拽,可以使用wondosbulider插件.但是用起来也不是那么方便.当然对于不乐意写代码的 ...
- int、bigint、smallint 和 tinyint
Transact-SQL 参考 int.bigint.smallint 和 tinyint 使用整数数据的精确数字数据类型. bigint 从 -2^63 (-9223372036854775808) ...
- Start-Process传递变量
如果$b="aa,bb" Start-Process PowerShell.exe -Argumentlist "d:\w.ps1 $a $b $c" Star ...
- BZOJ 1022 SHOI2008 小约翰的游戏John 博弈论
题目大意:反Nim游戏,即取走最后一个的人输 首先状态1:假设全部的堆都是1,那么堆数为偶先手必胜,否则先手必败 然后状态2:假设有两个堆数量同样且不为1,那么后手拥有控场能力,即: 若先手拿走一堆, ...
- shell修改文件名(二)
我想修改类似如下一批文件的文件名:AA01_01.txtAA01_02.txtAA01_03.txtAA01_04.txt 修改成BB02_01.txtBB02_02.txtBB02_03.txtBB ...
- [AngularJS] Catching errors with $exceptionHandler
The AngularJS $exceptionHandler service allows you to catch and handle unanticipated JavaScript erro ...
- ADO.Net的小知识(连接数据库)
数据库连接分为两种,分别是断开式连接和打开式连接.下面分别和大家分享一下断开时连接的查询: (1)引入命名空间:using System.Data.SqlClient; 该语句用于导入和ADO.Net ...
- java_spring_实例化bean的3种方法
//Dao类 package com.dao.bean.www; public interface PersonServiceDao { public abstract void save(); } ...