是不是靜態方法只能訪問靜態屬性!!!!!
靜態方法,能訪問實例對象的數據嗎???
用什麼方式訪問呢??
問題補充:
3 實例對象能訪問,靜態成員嗎?如何??
4 是不是訪問靜態成員的方法,要聲明爲靜態呢??
5 靜態對象和實例對象,其實對於c#的運行時,都是一樣的,只不過能不能做爲模板來使用,還有訪問,一個是類名,一個是對象名,就這點區別,還有其他嗎?
turbo280
的很不錯了
手持??應該是handel吧 一般我都認爲說成,句柄
- 2012-4-17爲什麼成員內部類裏不能定義靜態的屬性和方法 4
- 2012-6-26c#中類定義時,前面缺省修飾符,那麼他的訪問權限是什麼和java中有...
- 2010-8-6非靜態字段、方法或者屬性
- 2010-3-14求助!怎麼改正“字段初始值設定項無法引用非靜態字段、方法或屬性"? 12
- 2009-6-17非靜態字段、方法或屬性“System.Web.UI.Page.Server.get”要求對... 1
- 2007-11-29java 靜態方法77
- 2009-7-7關於java靜態方法的問題49
- 2011-10-29靜態方法在java程序中的訪問應用1
- 2006-4-10java中靜態變量和靜態方法分別有什麼特點?86
- 2009-4-14Java中的靜態方法是什麼?11
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!"); } } }