1. 程式人生 > >C#-靜態與非靜態的區別

C#-靜態與非靜態的區別

key 一個 全部 ont font console 需要 main 拓展

靜態和非靜態的區別
1、在非靜態類中,既可以有實例成員,也可以有靜態成員。如下代碼:

class Person
    {
       private static  string _name;
        private char _gender;
        
        public void M1()
        {
            Console.WriteLine("//我是非靜態方法");
        }
        public static void M2()
        {
            Console.WriteLine(
" //我是一個靜態方法"); } }

2、在調用實例成員的時候,需要使用對象名.實例成員;在調用靜態成員的時候,需要使用類名.靜態成員名。如下代碼:

static void Main(string[] args)
        {
            //調用實例成員
            Person P = new Person();//實例化
            P.M1();//實例方法
            Person.M2();//靜態方法
            Console.WriteLine();
            Console.ReadKey();
        }

總結

1)靜態成員必須使用類名去調用,而實例成員使用對象名調用。如下代碼:

 Person P = new Person();//實例化
 P.M1();//實例方法
 Person.M2();//靜態方法

2)靜態函數中,只能訪問靜態成員,不允許訪問實例成員。如下代碼:

 class Person
    {
        private static  string _name;
        private char _gender;
        public static void M2()
        {
            _name 
= "jingtai"; _gender = f;//此行報錯,不能引用非靜態字段 Console.WriteLine(" 我是一個靜態方法"); } }

3)實例函數中,既可以使用靜態成員,也可以使用實例成員。如下代碼:

 class Person
    {
        private static  string _name;
        private char _gender;
        public void M1()
        {
            _name = "feijingtai";
            _gender = m;
            Console.WriteLine("我是非靜態方法");
        }
        
    }

4)靜態類中只允許有靜態成員,不允許出現實例成員。否則會報錯,如下代碼:

static class Person
    {
        private static  string _name;
        //註釋掉的部分代碼會報錯(不能在靜態類中聲明實例成員)
        //private char _gender;
        //public void M1()
        //{
        //Console.WriteLine("我是非靜態方法");
        //}
        public static void M2()
        {
            Console.WriteLine(" 我是一個靜態方法");
        }
    }

使用:
1)、如果你想要你的類當做一個"工具類"去使用,這個時候可以考慮將類寫成靜態的。(工具類的意思就是,像工具一樣經常需要用到的類,比如:console類,經常需要用來在控制臺輸入輸出)
2)、靜態類在整個項目中,誰都可以調用靜態類,所以靜態類在整個項目中是資源共享。

拓展內容:

內存五大塊中的三大塊:堆, 棧, 靜態存儲區域

只有在程序全部結束之後,靜態類才會釋放資源。通過(GC Garbage Collection垃圾回收器)釋放資源

C#-靜態與非靜態的區別