c#靜態

c# 靜態方法,和靜態屬性

2009-6-23 23:12
提問者: math_phy | 瀏覽次數:2633次
是不是靜態方法只能訪問靜態屬性!!!!!

靜態方法,能訪問實例對象的數據嗎???

用什麼方式訪問呢??

問題補充:

3  實例對象能訪問,靜態成員嗎?如何??

4 是不是訪問靜態成員的方法,要聲明爲靜態呢??


5 靜態對象和實例對象,其實對於c#的運行時,都是一樣的,只不過能不能做爲模板來使用,還有訪問,一個是類名,一個是對象名,就這點區別,還有其他嗎? 

turbo280
的很不錯了 


手持??應該是handel吧  一般我都認爲說成,句柄

我來幫他解答
2009-6-24 02:07
滿意回答
首先訪問靜態成員是不必創建對象的,直接 類名.靜態成員名就可以訪問到,實

例對象無法訪問靜態成員的,兩者的最大的區別在於程序加載時給所有的static

分配內存,且常駐內存,非靜態時在實例化的時候才分配,但調用一個常用方法

或屬性而每次去創建一個實例,那樣影響執行效率和性能,static一般用於需要

全局共享時聲明,期生命週期和主進程相同,垃圾回收機制對它都不起作用。

不知我小小的意見能不能幫上你忙,祝你好運!
27
| 評論(1)

回答者: turbo280 | 二級

擅長領域: 韓語 大連市

參加的活動: 暫時沒有參加的活動

其他回答 共3條
2009-6-24 13:45jam_li | 六級
靜態方法是不需要實例就可以調用的,連實例都沒有,怎麼可能訪問到實例對象的數據呢 
調用靜態成員需要用“類名.成員”名調用,誰能調用誰不能調用只受成員的作用域限制。所以,在類的實例方法中是可以調用靜態成員的,只不過仍然需要用“類名.成員名”的方式。 
2
| 評論
2009-6-25 15:02wcpeter1988 | 四級
一樓有一點錯誤,實例對象訪問靜態成員沒有問題,
爲二樓做點補充
靜態成員在未運行時無法訪問實例對象的原因是因爲無法取到這個實例對象(因爲還沒創建),但運行後在實例對象創建後就可以取到了,可以通過添加靜態的屬性用來保存實例對象,然後就可以在靜態成員中使用該靜態屬性調用XX對象,但是這仍然是在使用靜態屬性,只不過該屬性指向了一個實例對象。
所以能不能訪問,能,手持着對象都能訪問。 
1
| 評論
2009-6-26 15:0378561940 | 五級
這些簡單的技術問題,你可以到csdn論壇裏面問問,也可以直接看MSDN的,很基礎的概念,自己要看看書,然後結合一些程序看一下就清楚了。 

提醒一下;handle 是句柄的意思,不是handel 

c#靜態成員與靜態方法

 (2012-03-06 13:51:50)
分類: 技術-C#

http://www.cnblogs.com/jyfly1984/archive/2010/10/27/1862674.html

 

靜態成員

1. (初始化) C#靜態方法及屬性在程序啓動的時候,就全部裝入內存的,而不管這些方法、屬性以後有沒有用到。即使是沒有人再訪問程序,這部分內存仍然不會釋放

- 【實驗證明,不需要實例化類對象,靜態成員就已經被賦值】

- 【實驗證明,甚至不需要訪問到靜態變量,它就會被賦值,只要你代碼裏對它有賦值操;如果沒有賦值操作,int會被設爲0】

- 【實驗證明,不需要顯示訪問到對象,靜態變量就會被處理。順序爲:聲明時自帶的賦值操作 -> 靜態構造函數 -> 程序入口Main

- 總結來說,靜態成員變量是在程序入口前,所有的初始賦值以完成;如果有賦值則賦值,否則給缺省值。

2. (被誰訪問)可以被靜態方法和非靜態方法所訪問

 

靜態方法

1. 是一種特殊的成員方法,不屬於類的某一個具體的實例,它屬於類本身。

2. (不能訪問什麼)靜態函數的實現裏不能使用非靜態成員,如非靜態變量、非靜態函數等

3. (能訪問什麼)靜態成員函數僅能訪問靜態的數據成員,不能訪問非靜態的數據成員,也不能訪問非靜態的成員函數,這是由於靜態的成員函數沒有this指針。

 

非靜態方法

1. (能訪問什麼)所有的靜態方法,靜態成員,非靜態方法,非靜態成員

 

訪問關係總結

  靜態方法 靜態成員 (在程序啓動時最早被賦值) 非靜態方法 非靜態成員(在創建類對象後被賦值)
 靜態方法 Y Y N N
 非靜態方法 Y Y Y Y
     
     

 

靜態構造函數

  • 用於對靜態字段、只讀字段等的初始化。              
  • 添加static關鍵字,不能添加訪問修飾符,因爲靜態構造函數都是私有的。      
  • 類的靜態構造函數在給定應用程序域中至多執行一次:只有創建類的實例或者引用類的任何靜態成員才激發靜態構造函數 [實驗看,不訪問也會處理]
  • 靜態構造函數是不可繼承的,而且不能被直接調用。            
  • 如果類中包含用來開始執行的 Main 方法,則該類的靜態構造函數將在調用 Main 方法之前執行。任何帶有初始值設定項的靜態字段,則在執行該類的靜態構造函數時,先要按照文本順序執行那些初始值設定項。 
  • 如果沒有編寫靜態構造函數,而這時類中包含帶有初始值設定的靜態字段,那麼編譯器會自動生成默認的靜態構造函數。

Sample Program

===============================================================

using System; using System.Collections.Generic; using System.Linq; using System.Text;

namespace ConsoleApplication1 {     class StaticTest     {

        static int x=10;         int y = 0;

        static StaticTest()         {             x = 15;         }

        public StaticTest()         {             x = 20;         }         public void SetX(int a)         {             x = a;         }

        public void SetY(int a)         {             y = a;         }         public static void Print()         {             Console.WriteLine("x = {0}", x);         }         static void Main(string[] args)         {             //StaticTest st = new StaticTest();             Console.WriteLine("Hello World!");         }     } }

發佈了1 篇原創文章 · 獲贊 12 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章