zoukankan      html  css  js  c++  java
  • 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 的繼承類  */
  • 相关阅读:
    mysql has gone away
    [置顶] 在Visual Studio 2008上调试C语言程序
    滚动加载更多内容
    【jeecg-mybatis版本】 mybatis+spring mvc 完美整合方案 查询,保存,更新,删除自动生成
    Android Developers:按钮
    java 从零开始,学习笔记之基础入门<集合>(十六)
    Ubuntu MYSQL环境搭建
    Android 如何预置APK M
    php基础系列:从用户登录处理程序学习mysql扩展基本操作
    CMUSphinx Learn
  • 原文地址:https://www.cnblogs.com/ygtup/p/9358874.html
Copyright © 2011-2022 走看看