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這個軟件。干什么用的。反編譯呀。。。。寒。