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();
            }
        }
    }
  • 相关阅读:
    view 的继承关系
    dos 下小tip
    Required diagnostic data collection for RMAN backup
    数据库应用设计设计报告
    程序 从存储卡 内存卡 迁移到 SD卡
    c++ 参赛设置
    c++ 用构造函数
    Ip
    error C3872: “0x3000”: 此字符不允许在标识符中使用
    机器字长 32位与64位的区别
  • 原文地址:https://www.cnblogs.com/flaaash/p/2024395.html
Copyright © 2011-2022 走看看