C#嵌套类

嵌套类顾名思义就是类或者结构中定义的类

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

<1>嵌套类的默认访问权限是private ,可以指定为public,protected,private,internal,protected internal。
<2>嵌套类型可以访问外部类(包裹嵌套类的类),如果要访问外部类型,要把外部类通过构造函数传进一个实例
<3>嵌套类中只能访问外部类中的静态成员,不能直接访问外部类的非静态成员。

namespace ConsoleApplication11Anonymous
{
    class Class1
    {
        private int x;
        protected string str;
        static int y;

        public class Nested
        {
            int xx;
            string ss;
            void print()
            {
                //int y = x;  //error,不能访问外部的非静态成员
                int z = y;    //OK ,可以访问外部的静态成员
            }

            public Nested(Class1 A)
            {
                xx = A.x;   //通过外部类的实例来访问外部类私有成员
                ss = A.str; //通过外部类的实例来访问外部类保护成员
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {

            Class1 X = new Class1();
            Class1.Nested CN = new Class1.Nested( X );

        }
    }
}

<4>根据C#作用域的规则,外部类只能通过内部类的实例来访问内部类的public成员,不能访问protected,private。

class Class2
    {
        private int x;
        static private int y;

        public void func()
        {
            //x = xx;   //当前上下文中不存在名称“xx”
            //x = zz;   //当前上下文中不存在名称“zz”
            //x = aa;   //当前上下文中不存在名称“aa”
            x = Nested.aa;
            Console.WriteLine(x);
        }

        public void funcs()
        {
            //这个只能访问Nested类的public成员
            Nested XX = new Nested();
            x = XX.zz;
            Console.WriteLine(x);
            //x = XX.aa;//访问静态成员只能通过类名而不是实例
            x = Nested.aa;
            Console.WriteLine(x);
        }

        private class Nested
        {
            private int xx;
            protected int yy;
            public int zz;
            public static int aa;

        }
    }
时间: 2024-12-21 21:56:02

C#嵌套类的相关文章

C# 静态static 嵌套类 分部类

/*static的相关内容:静态字段,静态属性,静态方法,,静态构造,静态类,readonly,const,嵌套类,分部类 * static可以理解为全局的,共享同一块内存 * 可以通过default(类型名)得到每个类型的默认值 * 静态字段不从属于字段而是从属与类,而实例字段都是从属于每个字段,针对于每个字段都有不同的值 * 类和对象都能关联数据: * this是用于实例的访问方法,所以你能用this.静态成员进行访问 * 要想在静态方法中获得实例成员的访问,就必须先获得对字段或方法所从属于

C++ Primer 学习笔记_104_特殊工具与技术 --嵌套类

特殊工具与技术 --嵌套类 可以在另一个类内部(与后面所讲述的局部类不同,嵌套类是在类内部)定义一个类,这样的类是嵌套类,也称为嵌套类型.嵌套类最常用于定义执行类. 嵌套类是独立的类,基本上与它们的外围类不相关,因此,外围类和嵌套类的对象是互相独立的.嵌套类型的对象不具备外围类所定义的成员,同样,外围类的成员也不具备嵌套类所定义的成员. 嵌套类的名字在其外围类的作用域中可见,但在其他类作用域或定义外围类的作用域中不可见.嵌套类的名字将不会与另一作用域中声明的名字冲突 嵌套类可以具有与非嵌套类相同

快学Scala 第八课 (嵌套类)

嵌套类: class Human { class Student{ val age = 10 } } object ClassDemo { def main(args: Array[String]): Unit = { val h = new Human val s = new h.Student println(s.age) } } 有时会遇到这种情况: class Human { class Student { def addS(s: Student) = { val ab = new Ar

ZeroC ICE源代码中的那些事 - 嵌套类和局部类

使用嵌套类(类中定义的类,c++没有静态类)或局部类(在函数或成员方法中定义的类),进行行为模式的委托(委托请求)或异步 . java中嵌套类和局部类隐式完成了你对外部对象(实例)访问的私有堆栈的初始化,而c++你必须通过类成员变量来保存你要访问到的 外部对象(变量,实例),即自行实现私有堆栈,并使用嵌套类和局部类的构造函数,以参数传递的方式初始化这些用作私有堆栈的成 员变量.当你的局部类(在函数中定义的类)要访问到函数的局部变量时,你并不能确保局部类在局部变量被释放前访问,所以你只能 将局部变

c++嵌套类-内存分配

首先看下列代码:int main(){    double *p;    printf("sizeof(int):%d\nsizeof(double):%d\nsizeof(ptr):%d\n", sizeof(int), sizeof(double),sizeof(p)); getchar();    return 0;}结果为:我是在64位机器上运行的,可以看到,int类型分配4字节,double类型8字节,指针4字节./**********************/再看如下代码:

嵌套类 局部类

嵌套类 局部类 <c++ primer 3th> C++嵌套类 1.   嵌套类的名字只在外围类可见. 2.   类的私有成员只有类的成员和友元可以访问,因此外围类不可以访问嵌套类的私有成员.嵌套类可以访问外围类的成员(通过对象.指针或者引用). 3.   一个好的嵌套类设计:嵌套类应该设成私有.嵌套类的成员和方法可以设为 public . 4.   嵌套类可以直接访问外围类的静态成员.类型名( typedef ).枚举值. 嵌套类 一个类可以在另一个类中定义,这样的类被称为嵌套类.嵌套类是其

java进阶--嵌套类和接口

public class third { private int id1;//私有成员 public int id2; public static class class_top{ void sayid(third th){//静态嵌套类想要访问顶层类的私有/公有成员只能通过传递引用对象 th.id1=12; th.id2=12; } } public static class static_class extends class_top{ static void say_id(third th

【C++】嵌套类、友元

黄邦勇帅 里面关于嵌套类的介绍我有疑惑.里面11.9说在创建一个外围类的对象时先执行嵌套类的构造函数然后再执行外围类的构造函数,析构函数则以相反的方式执行. 可是我编程实验了一下,创建外围类对象时并不会执行嵌套类的构造函数 #include<iostream> using namespace std; class A { public: int a, b, c; A() { a = b = c = 0; cout << " A construct" <&l

C++ 中的嵌套类和局部类

C++ 中的嵌套类和局部类 最近趁着春节假期空闲,找了本C++ Primer 学了几章,发现C++ 中的许多特性自己都不知道.其中嵌套类和局部类感觉还是蛮有用的,简单的写写他们的用法. 嵌套类 所谓嵌套类就是可以在一个类中定义另一个类.这个被嵌套的类的作用域就只在它的上一级类中.下面是个例子: #include <iostream> using namespace std; class c1 { public: int a; void foo(); class c2 { public: int