该如何理解c#中的静态?
è¿ç®ç¬¦éè½½ç声ææ¹å¼ä¸æ¹æ³ç声ææ¹å¼ç¸åï¼ä½operatorå
³é®ååè¯ç¼è¯å¨ï¼å®å®é
ä¸æ¯ä¸ä¸ªè¿ç®ç¬¦éè½½ï¼åé¢æ¯ç¸å
³è¿ç®ç¬¦ç符å·ï¼å¨æ¬ä¾ä¸å°±æ¯+ãè¿åç±»åæ¯å¨ä½¿ç¨è¿ä¸ªè¿ç®ç¬¦æ¶è·å¾çç±»åãå¨æ¬ä¾ä¸ï¼æ两个ç¢éå èµ·æ¥ä¼å¾å°å¦ä¸ä¸ªç¢éï¼æ以è¿åç±»åå°±æ¯Vectorã对äºè¿ä¸ª+è¿ç®ç¬¦éè½½ï¼è¿åç±»åä¸å
å«ç±»ä¸æ ·ï¼ä½è¿ç§æ
åµå¹¶ä¸æ¯å¿
éçã两个åæ°å°±æ¯è¦æä½ç对象ã对äºäºå
è¿ç®ç¬¦(带两个åæ°)ï¼å¦+åï¼è¿ç®ç¬¦ï¼ç¬¬ä¸ä¸ªåæ°æ¯æ¾å¨è¿ç®ç¬¦å·¦è¾¹çå¼ï¼ç¬¬äºä¸ªåæ°æ¯æ¾å¨è¿ç®ç¬¦å³è¾¹çå¼ã
C#è¦æ±ææçè¿ç®ç¬¦éè½½é½å£°æ为publicåstaticï¼è¿è¡¨ç¤ºå®ä»¬ä¸å®ä»¬çç±»æç»æç¸å ³èï¼èä¸æ¯ä¸å®ä¾ç¸å ³èï¼æ以è¿ç®ç¬¦éè½½ç代ç ä½ä¸è½è®¿é®ééæç±»æåï¼ä¹ä¸è½è®¿é®thisæ è¯ç¬¦ï¼è¿æ¯å¯ä»¥çï¼å 为åæ°æä¾äºè¿ç®ç¬¦æ§è¡ä»»å¡æéè¦ç¥éçæææ°æ®ã
å¦ä¹ C#éæå½æ°ååéçä¸ä¸ªç²¾å ¸ä¾åä¸ä»£ç
ï¼1ï¼ç¨äºå¯¹éæå段ãåªè¯»å段ççåå§åã
ï¼2ï¼æ·»å staticå ³é®åï¼ä¸è½æ·»å 访é®ä¿®é¥°ç¬¦ï¼å 为éææé å½æ°é½æ¯ç§æçã
ï¼3ï¼ç±»çéææé å½æ°å¨ç»å®åºç¨ç¨åºåä¸è³å¤æ§è¡ä¸æ¬¡ï¼åªæå建类çå®ä¾æè å¼ç¨ç±»çä»»ä½éææåææ¿åéææé å½æ°
ï¼4ï¼éææé å½æ°æ¯ä¸å¯ç»§æ¿çï¼èä¸ä¸è½è¢«ç´æ¥è°ç¨ã
ï¼5ï¼å¦æç±»ä¸å å«ç¨æ¥å¼å§æ§è¡ç Main æ¹æ³ï¼å该类çéææé å½æ°å°å¨è°ç¨ Main æ¹æ³ä¹åæ§è¡ãä»»ä½å¸¦æåå§å¼è®¾å®é¡¹çéæå段ï¼åå¨æ§è¡è¯¥ç±»çéææé å½æ°æ¶ï¼å è¦æç §ææ¬é¡ºåºæ§è¡é£äºåå§å¼è®¾å®é¡¹ã
ï¼6ï¼å¦æ没æç¼åéææé å½æ°ï¼èè¿æ¶ç±»ä¸å å«å¸¦æåå§å¼è®¾å®çéæå段ï¼é£ä¹ç¼è¯å¨ä¼èªå¨çæé»è®¤çéææé å½æ°ã
以ä¸ç¨ä¾å代ç è¿ä¸æ¥è¯´æï¼
/**************************************************
* é æ æ é å½ æ° ç» ä¹
* ï¼1ï¼â â¡â¢â¦â¦ä¸ºæ§è¡é¡ºåº
* ï¼2ï¼è¾åºç»æï¼ static A()
* static B()
* X = 1, Y = 2
***************************************************/
using System;
class A { public static int X; static A()
//⣠æ§è¡å®åè¿åå°â¢ { X = B.Y + 1; Console.WriteLine("static A()"); } } class B { public static int Y = A.X + 1;
//⢠è°ç¨äºAçéææå,
// 转å°Açéææé å½æ°----> static B()
//â¡ å¦æ带æåå§å¼è®¾å®é¡¹çéæå段,
// æ§è¡è¯¥ç±»çéææé å½æ°æ¶,
// å è¦æç §ææ¬é¡ºåºæ§è¡é£äºåå§å¼è®¾å®é¡¹ã
// 转å°åå§å¼è®¾å®é¡¹----> { Console.WriteLine("static B()"); } static void Main()
//â ç¨åºå ¥å£,
// å¦æç±»ä¸å å«ç¨æ¥å¼å§æ§è¡ç Main æ¹æ³,
// 该类çéææé å½æ°å°å¨è°ç¨ Main æ¹æ³ä¹åæ§è¡ã
// 转å°Bçéææé å½æ°----> { Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);
//⤠è¾åºç»æ Console.ReadLine(); } }
ä»ä¹æ¯éææ¹æ³
éææ¹æ³ç1个ç¹å«ä½ç¨å°±æ¯ä¸ç¨å建类ç对象ï¼èç´æ¥ç¨ç±»éé¢çæ¹æ³(public static 2个æ¡ä»¶ï¼ï¼
ä¾å¦ï¼ class A { public static void b() {..............} }
å¯ä»¥è¿æ ·ç´æ¥ç¨ï¼ A.b(); é£ä¹å¨ç¨åºä¸å¦ä½å¯ä»¥å©ç¨éæå段åéææé æ¹æ³ï¼é常éç¨äºäºä¸äºä¸ä¼ç»å¸¸ååèåé¢ç¹ä½¿ç¨çæ°æ®ï¼æ¯å¦è¿æ¥å符串ï¼é 置信æ¯çï¼å½æ»¡è¶³ä¸é¢æ说ç两ç¹æ¶ï¼è¿è¡ä¸æ¬¡è¯»åï¼ä»¥åå°±å¯ä»¥æ¹ä¾¿ç使ç¨äºï¼åæ¶ä¹è约äºæ管èµæºï¼å 为对äºéææåï¼ä¸ä¸ªéæå段åªæ è¯ä¸ä¸ªåå¨ä½ç½®ã对ä¸ä¸ªç±»æ 论å建äºå¤å°ä¸ªå®ä¾ï¼å®çéæå段永è¿é½åªæä¸ä¸ªå¯æ¬ã static: ç±»åéï¼å¯¹è±¡å ±äº«ï¼å¯ä»¥ç¨ç±»åï¼å¯¹è±¡åç¹åï¼é´æ¥ä½¿ç¨ã ç±»æ¹æ³
1ï¼staticæ¹æ³ä¸ä¸è½ç´æ¥ä½¿ç¨ééææå, å 为ééææåä¸å®ä¾ç¸å ³ï¼éè¿å¯¹è±¡ç¹åé´æ¥ä½¿ç¨
2ï¼staticæ¹æ³ä¸ä¸è½ç¨thisï¼ä¸å®ä¾ç¸å ³ï¼
3ï¼éstaticæ¹æ³ä¸å¯ä»¥ä½¿ç¨staticæå
éææ¹æ³æä»ä¹å¼ç«¯?
é®ï¼æç¿»çä¸äºæºç å·¥ç¨æ¶çå°å ä¹æ²¡æä»ä¹éææ¹æ³å¯ç¬MsçSQLHelperä¸å ä¹å ¨æ¯éææ¹æ³ 为ä»ä¹å¢?
ç1ï¼å¨ä¸äºç³»ç»ä¸ä½¿ç¨é常é¢ç¹çæ¹æ³é½ä½¿ç¨éææ¹æ³å¯ä»¥æé«ç³»ç»æ§è½ææ¯è¿ä¹è®¤ä¸ºç ï¼ï¼
ç2ï¼æ¬èº«ä¸å¯å级, éå è¿è¦çä¸ä¸ªè½¯ä»¶äº§åçç®çæ¯ä»ä¹äº.
ç3ï¼ä¸ºäºæ¹ä¾¿ï¼ä¸ç¨å®ä¾åï¼ä½è¿æ ·ç¨åºç¼è¯è¿è¡æ¶å°±å ç¨äºç³»ç»èµæº
ç4ï¼éæçå±æ§åæ¹æ³å¨ç¨åºå¯å¨çæ¶åï¼å°±å ¨é¨è£ å ¥å åçï¼èä¸ç®¡è¿äºæ¹æ³ãå±æ§ä»¥åæ没æç¨å°ãå³ä½¿æ¯æ²¡æ人å访é®ç¨åºï¼è¿é¨åå åä»ç¶ä¸ä¼éæ¾è¿æå°±æ¯ï¼ææ访é®è çå°çéæå±æ§çæ°æ®å ä¹é½æ¯ä¸æ ·çï¼æ¯å¦Aç¨æ·è®¾ç½®äºUserNameè¿ä¸ªå±æ§ï¼Bç¨æ·è®¿é®çæ¶åï¼å¾å°çUserNameä»ç¶æ¯Aç¨æ·è®¾ç½®çé£ä¸ªãè¿ç§ç¹æ§ï¼å¦æç¨å¨åºå®æ°æ®ä¸ï¼é£ä¸ä¼æ太大é®é¢ï¼æ¯å¦è¿æ¥å符串ä¹ç±»ç
ç5ï¼éææ¹æ³/æ°æ®æåæ¯å±äºç±»çï¼ä¸æ¯å±äºæä¸ä¸ªå¯¹è±¡çï¼å èè°ç¨å®ä¸éè¦å®ä¾åï¼éææ¹æ³åéææ°æ®æåç¸å½äºå ±äº«åéã为该类çææ对象æå ±æï¼å èå¨éè¦å ±äº«æ°æ®æ¶ï¼å®ä¹è¿ç§ç±»åæ¶å¾å¥½çéæ©ã ä¸ä½å®ä¹ä¸ä¸ªç±»åï¼ä¸ä¸å®è¦å®ä¾å对象ï¼è¯¥ç±»çææéææåå°±è½½å ¥å å(并ä¸æ¯ç¨åºå¯å¨ï¼å°±è£ å ¥å åï¼æ²¡æå®ä¹è¯¥ç±»æ¶å®ä¸ä¼è½½å ¥å å) éææåçä½ç¨åä¸å®æå±çç±»çä½ç¨åç¸å
C#è¦æ±ææçè¿ç®ç¬¦éè½½é½å£°æ为publicåstaticï¼è¿è¡¨ç¤ºå®ä»¬ä¸å®ä»¬çç±»æç»æç¸å ³èï¼èä¸æ¯ä¸å®ä¾ç¸å ³èï¼æ以è¿ç®ç¬¦éè½½ç代ç ä½ä¸è½è®¿é®ééæç±»æåï¼ä¹ä¸è½è®¿é®thisæ è¯ç¬¦ï¼è¿æ¯å¯ä»¥çï¼å 为åæ°æä¾äºè¿ç®ç¬¦æ§è¡ä»»å¡æéè¦ç¥éçæææ°æ®ã
å¦ä¹ C#éæå½æ°ååéçä¸ä¸ªç²¾å ¸ä¾åä¸ä»£ç
ï¼1ï¼ç¨äºå¯¹éæå段ãåªè¯»å段ççåå§åã
ï¼2ï¼æ·»å staticå ³é®åï¼ä¸è½æ·»å 访é®ä¿®é¥°ç¬¦ï¼å 为éææé å½æ°é½æ¯ç§æçã
ï¼3ï¼ç±»çéææé å½æ°å¨ç»å®åºç¨ç¨åºåä¸è³å¤æ§è¡ä¸æ¬¡ï¼åªæå建类çå®ä¾æè å¼ç¨ç±»çä»»ä½éææåææ¿åéææé å½æ°
ï¼4ï¼éææé å½æ°æ¯ä¸å¯ç»§æ¿çï¼èä¸ä¸è½è¢«ç´æ¥è°ç¨ã
ï¼5ï¼å¦æç±»ä¸å å«ç¨æ¥å¼å§æ§è¡ç Main æ¹æ³ï¼å该类çéææé å½æ°å°å¨è°ç¨ Main æ¹æ³ä¹åæ§è¡ãä»»ä½å¸¦æåå§å¼è®¾å®é¡¹çéæå段ï¼åå¨æ§è¡è¯¥ç±»çéææé å½æ°æ¶ï¼å è¦æç §ææ¬é¡ºåºæ§è¡é£äºåå§å¼è®¾å®é¡¹ã
ï¼6ï¼å¦æ没æç¼åéææé å½æ°ï¼èè¿æ¶ç±»ä¸å å«å¸¦æåå§å¼è®¾å®çéæå段ï¼é£ä¹ç¼è¯å¨ä¼èªå¨çæé»è®¤çéææé å½æ°ã
以ä¸ç¨ä¾å代ç è¿ä¸æ¥è¯´æï¼
/**************************************************
* é æ æ é å½ æ° ç» ä¹
* ï¼1ï¼â â¡â¢â¦â¦ä¸ºæ§è¡é¡ºåº
* ï¼2ï¼è¾åºç»æï¼ static A()
* static B()
* X = 1, Y = 2
***************************************************/
using System;
class A { public static int X; static A()
//⣠æ§è¡å®åè¿åå°â¢ { X = B.Y + 1; Console.WriteLine("static A()"); } } class B { public static int Y = A.X + 1;
//⢠è°ç¨äºAçéææå,
// 转å°Açéææé å½æ°----> static B()
//â¡ å¦æ带æåå§å¼è®¾å®é¡¹çéæå段,
// æ§è¡è¯¥ç±»çéææé å½æ°æ¶,
// å è¦æç §ææ¬é¡ºåºæ§è¡é£äºåå§å¼è®¾å®é¡¹ã
// 转å°åå§å¼è®¾å®é¡¹----> { Console.WriteLine("static B()"); } static void Main()
//â ç¨åºå ¥å£,
// å¦æç±»ä¸å å«ç¨æ¥å¼å§æ§è¡ç Main æ¹æ³,
// 该类çéææé å½æ°å°å¨è°ç¨ Main æ¹æ³ä¹åæ§è¡ã
// 转å°Bçéææé å½æ°----> { Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);
//⤠è¾åºç»æ Console.ReadLine(); } }
ä»ä¹æ¯éææ¹æ³
éææ¹æ³ç1个ç¹å«ä½ç¨å°±æ¯ä¸ç¨å建类ç对象ï¼èç´æ¥ç¨ç±»éé¢çæ¹æ³(public static 2个æ¡ä»¶ï¼ï¼
ä¾å¦ï¼ class A { public static void b() {..............} }
å¯ä»¥è¿æ ·ç´æ¥ç¨ï¼ A.b(); é£ä¹å¨ç¨åºä¸å¦ä½å¯ä»¥å©ç¨éæå段åéææé æ¹æ³ï¼é常éç¨äºäºä¸äºä¸ä¼ç»å¸¸ååèåé¢ç¹ä½¿ç¨çæ°æ®ï¼æ¯å¦è¿æ¥å符串ï¼é 置信æ¯çï¼å½æ»¡è¶³ä¸é¢æ说ç两ç¹æ¶ï¼è¿è¡ä¸æ¬¡è¯»åï¼ä»¥åå°±å¯ä»¥æ¹ä¾¿ç使ç¨äºï¼åæ¶ä¹è约äºæ管èµæºï¼å 为对äºéææåï¼ä¸ä¸ªéæå段åªæ è¯ä¸ä¸ªåå¨ä½ç½®ã对ä¸ä¸ªç±»æ 论å建äºå¤å°ä¸ªå®ä¾ï¼å®çéæå段永è¿é½åªæä¸ä¸ªå¯æ¬ã static: ç±»åéï¼å¯¹è±¡å ±äº«ï¼å¯ä»¥ç¨ç±»åï¼å¯¹è±¡åç¹åï¼é´æ¥ä½¿ç¨ã ç±»æ¹æ³
1ï¼staticæ¹æ³ä¸ä¸è½ç´æ¥ä½¿ç¨ééææå, å 为ééææåä¸å®ä¾ç¸å ³ï¼éè¿å¯¹è±¡ç¹åé´æ¥ä½¿ç¨
2ï¼staticæ¹æ³ä¸ä¸è½ç¨thisï¼ä¸å®ä¾ç¸å ³ï¼
3ï¼éstaticæ¹æ³ä¸å¯ä»¥ä½¿ç¨staticæå
éææ¹æ³æä»ä¹å¼ç«¯?
é®ï¼æç¿»çä¸äºæºç å·¥ç¨æ¶çå°å ä¹æ²¡æä»ä¹éææ¹æ³å¯ç¬MsçSQLHelperä¸å ä¹å ¨æ¯éææ¹æ³ 为ä»ä¹å¢?
ç1ï¼å¨ä¸äºç³»ç»ä¸ä½¿ç¨é常é¢ç¹çæ¹æ³é½ä½¿ç¨éææ¹æ³å¯ä»¥æé«ç³»ç»æ§è½ææ¯è¿ä¹è®¤ä¸ºç ï¼ï¼
ç2ï¼æ¬èº«ä¸å¯å级, éå è¿è¦çä¸ä¸ªè½¯ä»¶äº§åçç®çæ¯ä»ä¹äº.
ç3ï¼ä¸ºäºæ¹ä¾¿ï¼ä¸ç¨å®ä¾åï¼ä½è¿æ ·ç¨åºç¼è¯è¿è¡æ¶å°±å ç¨äºç³»ç»èµæº
ç4ï¼éæçå±æ§åæ¹æ³å¨ç¨åºå¯å¨çæ¶åï¼å°±å ¨é¨è£ å ¥å åçï¼èä¸ç®¡è¿äºæ¹æ³ãå±æ§ä»¥åæ没æç¨å°ãå³ä½¿æ¯æ²¡æ人å访é®ç¨åºï¼è¿é¨åå åä»ç¶ä¸ä¼éæ¾è¿æå°±æ¯ï¼ææ访é®è çå°çéæå±æ§çæ°æ®å ä¹é½æ¯ä¸æ ·çï¼æ¯å¦Aç¨æ·è®¾ç½®äºUserNameè¿ä¸ªå±æ§ï¼Bç¨æ·è®¿é®çæ¶åï¼å¾å°çUserNameä»ç¶æ¯Aç¨æ·è®¾ç½®çé£ä¸ªãè¿ç§ç¹æ§ï¼å¦æç¨å¨åºå®æ°æ®ä¸ï¼é£ä¸ä¼æ太大é®é¢ï¼æ¯å¦è¿æ¥å符串ä¹ç±»ç
ç5ï¼éææ¹æ³/æ°æ®æåæ¯å±äºç±»çï¼ä¸æ¯å±äºæä¸ä¸ªå¯¹è±¡çï¼å èè°ç¨å®ä¸éè¦å®ä¾åï¼éææ¹æ³åéææ°æ®æåç¸å½äºå ±äº«åéã为该类çææ对象æå ±æï¼å èå¨éè¦å ±äº«æ°æ®æ¶ï¼å®ä¹è¿ç§ç±»åæ¶å¾å¥½çéæ©ã ä¸ä½å®ä¹ä¸ä¸ªç±»åï¼ä¸ä¸å®è¦å®ä¾å对象ï¼è¯¥ç±»çææéææåå°±è½½å ¥å å(并ä¸æ¯ç¨åºå¯å¨ï¼å°±è£ å ¥å åï¼æ²¡æå®ä¹è¯¥ç±»æ¶å®ä¸ä¼è½½å ¥å å) éææåçä½ç¨åä¸å®æå±çç±»çä½ç¨åç¸å
温馨提示:答案为网友推荐,仅供参考
第1个回答 2013-11-12
1.静态用了static关键字2.调用静态方法只需用类名调用,例如:MessageBox.Show()3.静态方法不可以直接访问实例成员4.静态方法不能直接调用实例方法5.静态方法在调用前初始化,实例方法在实例化对象时初始化。
第2个回答 2013-11-12
其实用的最多的就是用静态的做统计计数,因为它无论你在什么地方修改后,读取的时候都是修改后的值,它是个唯一值
第3个回答 2013-11-12
static 声明.不管是成员,还是方法,都有一个副本存在在内在中.