zoukankan      html  css  js  c++  java
  • class之new和ctor意义及作用域

    new关键字计算class占用的字节数,并在堆上分配空间。

    class 的ctor默认构造函数实现class内部所有成员的默认值赋值;如果你定义了带参构造函数,那么编译器不会自动生成默认构造;假设类要被继承,尽管派生 类实例化按照派生类的带参构造方式实例化,但是对象生成树还是调用基类的默认构造,所以,一个类如果没有默认构造,该类不能被派生。

    作用域(变量或者方法):
    private:仅在类内部可访问
    protected:仅在类及其派生类内部访问
    internal:仅在同一个程序集(dll)内可以访问。程序集内可以包含多个命名空间,每个命名空间也可以包含很多类。
    protected internal:当前程序集,或者当前程序集内类的派生类中(可以在不同的命名空间内)我感觉不到和internal有什么区别
    using System;

    namespace DemoConsole
    {
        public class ConsoleBasic
        {
            private void MethodPrivate(){}                            //仅在本类内部可见
            protected void MethodProtected(){}                        //仅在本类和其派生类中可见
            internal void MethodInternal(){}                        //在本程序集内可见
            protected internal void MethodProtectedInternal(){}        //在本程序集,或本程序集内定义该变量的派生类中可见
            protected string token;//="privilege";
            internal string international;
            public string version="4.0";
            
            public void ShowFormat()
            {
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.BackgroundColor = ConsoleColor.Blue;
                
                Console.WriteLine("\n{0}:\tC Format {0:C}\tF3 Format {0:F3}\n"+
                                  "{1}:\t\tN Format {1:N}\tx Format {1:x}\t{1:E}",
                                  99989.9876,9999);
                /*
    99989.9876:     C Format ¥99,989.99    F3 Format 99989.988
    9999:           N Format 9,999.00       x Format 270f   9.999000E+003
                 */
            }
        }
        
        public class ConsoleExtend:ConsoleBasic
        {
            public void Show()
            {
                MethodProtected();
                MethodInternal();
                MethodProtectedInternal();
                base.version="5.0";
                base.token="low level";//派生类中可以访问基类的protected成员
                base.international="US";
            }
        }
    }

    namespace InternalDemo
    {
        public class ClassInOtherNamespace
        {
            public void MethodInOtherNamespace()
            {
                DemoConsole.ConsoleExtend ce = new DemoConsole.ConsoleExtend();
                ce.version="in other namespace";//可以在另一命名空间内直接访问public成员
                ce.international="United States";
                ce.MethodInternal();//在同一个程序集内internal成员都可以访问;
                ce.MethodProtectedInternal();
            }
        }
    }
  • 相关阅读:
    【转】虚拟机 NAT网络设置
    [转载]应用 Valgrind 发现 Linux 程序的内存问题
    Visual Studio 代码格式化插件(等号自动对齐、注释自动对齐等)
    【转】链接任意目录下库文件(解决错误“/usr/bin/ld: cannot find -lxxx”
    C语言实现封装、继承和多态
    美国专利搜索网站
    【转】基于OCS实现高速缓存
    【转】防止网页被搜索引擎、爬虫和网页采集器收录或克隆复制的方法汇总
    [转]机器学习和计算机视觉----数学基础
    [转]机器学习与数据挖掘的学习路线图
  • 原文地址:https://www.cnblogs.com/flaaash/p/2024395.html
Copyright © 2011-2022 走看看