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 的繼承類  */

 

posted @ 2018-07-24 11:09  GT.Yao  阅读(166)  评论(0编辑  收藏  举报