• C# 語法---4.靜態 static、類成員訪問聲明(public private internal)


    靜態 static
    什麼是靜態:會一直佔用內存
    什麼是非靜態:實例化后擦會佔用內存
    程序配置數據部分時使用靜態類
    1.靜態類
    • 只包含靜態成員
    • 無法實例化
    • 本質是一個抽象的密封類,不能被繼承和實例化
    • 不能包含實例構造函數
    • 如果一個類下面的所有成員都需要被共享,那麼可以把這個類定義為靜態類
    2.靜態成員
    • 屬於類,通過“類名.靜態成員”方式訪問,在類第一次加載時,類下面的所有靜態成員都會被加載
    • 只被創建一次,所以靜態成員只有一份
    • 靜態成員會被創建到“靜態存儲區”裡面,一旦創建知道程序退出再會被回收
    • 無論對一個類創建多少個實例,它的靜態成員都只有一個副本
    3.靜態方法
    • 不屬於特定對象的方法
    • 可以訪問靜態成員
    • 不能直接訪問實例成員,可以在實例函數調用的情況下,實例成員作為參數傳給靜態方法
    class A
    {
        private static A instance = new A();
        public static void F()  //靜態
        {
            A.G();
        }
    }
    public void G();//非靜態
    {
    }
    • 不能直接調用實例方法,可以間接調用,創建一個類的實例,通過這一特定對象去調用

     類成員訪問聲明(public private internal)

    1.public:  共有的   訪問沒有限制
    2.private:  私有的 聲明他們的類和結構中才能訪問
    3.internal: 內部的 同一個程序集(命名空間)中的所有類都能訪問,可跨類
    4.protected: 受保護的 只能在它的類和它的派生類(繼承的子類)中訪問,可跨程序集
    5.protected internal: 只能在本类,派生类或者包含该类的程序集中访问
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace Statements1
    {
        public class Class1
        {
            internal String strInternal = null;
            public String strPublic;
            internal pretected String strInternalProtected = null;
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace Statements1
    {
        class Class2
        {
            private String tmpStr = new Class1().strInternal;
            private String tmpStr = new Class1().strInternalProtected;
            private String tmpStr = new Class1().strPublic;
        }
    }
    /* class2類可以訪問到Class1的三個成員,因為他們在同一個程序集statement1里  */
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace Statements2
    {
        class Program
        {
            class Class3:Class1
            {
                public Class3()
                {
                    base.StrInternalProtected;
                    base.StrPublic;
                }
            }
        }
    }
    /* class3類無法訪問到class1的strInternal成員,因為他們不是同一個程序集,但是可以訪問到strInternalProtected,因為Class3是class1 的繼承類  */
  • 相关阅读:
    Java io流 之file类(文件和文件夹)
    异常处理
    封装
    面向对象与类
    包与模块的使用
    模块
    递归函数
    迭代器
    装饰器
    函数基础2
  • 原文地址:https://www.cnblogs.com/ygtup/p/9358874.html
Copyright © 2020-2023  润新知