• 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();
            }
        }
    }
  • 相关阅读:
    Requests
    探索式测试(概念)
    IDEA_Java+maven+selenium3+testng自动化测试环境安装
    RobotFramework Formate
    Robot Framework_dictionary search
    Git
    配置robotframework框架的自动化环境
    Python学习之路
    对 Jenkins+ANT+Jmeter 接口测试的实践
    自动生成测试脚本方案浅析
  • 原文地址:https://www.cnblogs.com/flaaash/p/2024395.html
Copyright © 2020-2023  润新知