C#學習筆記(一)-- 入門的困惑
2024-07-21 02:17:26
供稿:網友
 
簡單的我就不寫了,主要寫一下c#學習中的要點和難點。1.由helloworld開始先看一段基本上每本c#書里都會講到的例子,很老土。using system;namespace test{     class class1     {         [stathread]         static void main(string[] args)         {              system.console.writeline("hello,world!");         }     }}先引用一個命名空間system,再定義一個自己的命名空間test,里面有一個類class1,屬性[stathread],一個入口的main方法,注意:跟java不一樣,main首名母是大寫,main必須是static的。不然怎么開始呢?難倒要實例化才行?哈哈,定義為static就是把它放在椎里。這里規舉。 2.命名空間再來看看system.console.writeline("hello,world!");輸一名語名到控制臺。調用system命名空間里的console類的writeline方法。system命名空間是前面我們已經引用了的using system; 你也可以在引用的時候改個名字output,那么在調用的時候就是output.console.writeline("hello,world!");試一試:using output=system; namespace test{     class class1     {         [stathread]         static void main(string[] args)         {              output.console.writeline("hello,world!");         }     }}運行報錯:f:/mydoc/visual studio projects/test/class1.cs(7): 找不到類型或命名空間名稱“stathread”(是否缺少 using 指令或程序集引用?)嘿嘿,是[stathread]惹的禍。干掉它。再試,搞定。[stathread]是single  thread  apartment單線程套間的意思。是一種線程模型。其它的好像還是mta(多線程套間)、free  thread(自由線程)。這個屬性要加在主  main  上。這個屬性只在  com  interop  所用,如果全部是  managed  code  則無用。簡單的說法:[stathread]指示應用程序的默認線程模型是單線程單元 (sta)。啟動線程模型可設置為單線程單元或多線程單元。如果未對其進行設置,則該線程不被初始化。也就是說如果你用的.net framework,并且沒有使用com interop,一般不需要這個attribute。 明白了吧。 注意,using指令是用于命名空間的。變化著用一下,也可以為類創建別名:using output=system.console; namespace test{     class class1     {         //[stathread]         static void main(string[] args)         {              output.writeline("hello,world!");         }     }}這樣也行。。。 命令空間是可以嵌套的。如:using system; namespace test{     namespace t1     {         class class1         {              static void main(string[] args)              {                   system.console.writeline("t1.class1");              }         }     }      namespace t2     {         class class2         {              static void main(string[] args)              {                   system.console.writeline("t2.class2");              }         }     }}運行,報錯。我是故意的(臺下:大騙子)。j不要扔磚頭啊。不要這么容易就放棄嘛,要執著。看錯誤f:/mydoc/visual studio projects/test/class1.cs(9): 程序“f:/mydoc/visual studio projects/test/obj/debug/test.exe”定義了不止一個入口點:“test.t1.class1.main(string[])” 因為你的命名空間test里定義了二個main方法,所以呢,不用我說了吧。using system; namespace test{     namespace t1     {         class class1         {              static void main(string[] args)              {                   system.console.writeline("t1.class1");                   system.console.writeline(t2.class2.myfunction());              }         }     }      namespace t2     {         class class2         {              public static string myfunction()              {                   return "t2.class2";              }         }     }} 外部程序引用的時候就是這樣:using test.t1;或using test.t2; 入門就這些問題。打開visual studio .net 2003 命令提示鍵入ildasm,這個程序可以查看編譯后的元數據。 網上查一下reflector這個軟件。干什么用的。反編譯呀。。。。寒。