<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
1.C#區分大小寫,所以myVar和MyVar是兩個不同的變數。
2.每個C#可執行檔案(如控制檯應用程式,Windows應用程式和Windows服務)都必須有一個入口點————Main()(M大寫)
public static void Main() { //do something }
在程式啟動時呼叫這個方法。該方法要麼沒有返回值(void),要麼返回一個整數(int)
1.編譯器不允許在表示式中使用未初始化的變數。如果變數是類或結構中的欄位,如果沒有初始化,建立這些變數時,其預設值就是0。
2.型別推斷
型別推斷(type inference)使用var關鍵字。編譯器可以根據變數的初始化值“推斷”變數的型別。var somenum = 0;即使somenum從來沒有宣告為int,編譯器也可以確定,只要somenum在其作用域內,就是一個int.宣告了變數,推斷出了型別後,就不能改變變數型別了。變數的型別確定後,就遵循其它變數型別遵循的強型別化規則。
3.變數的作用域
變數的作用域是存取該變數的程式碼區域。只要變數的作用域是程式的不同部分就不會有問題。
(1).區域性變數的作用域衝突
public static int Main() { int j =20; for(int i=0;i<20;i++) { int j = 30; // do something } }
編譯時會報錯,因為在Main()方法作用域內有兩個變數j,編譯器無法區分這兩個變數。
(2).欄位和區域性變數的作用域衝突
某些情況下可以區分名稱相同,作用域相同的兩個識別符號。原因是C#在變數之間有一個基本的區分,它把在類級別宣告的變數看作欄位,而把在方法中宣告的變數看作區域性變數。
class Program { int j = 20; static void Main(string[] args) { int j = 30; Console.WriteLine(j); Console.ReadKey(); } }
雖然在Main()方法的作用域內宣告了兩個j,這段程式碼也會編譯。在類級別上定義的j,在該類刪除前是不會超出作用域的,在Main()中宣告的j隱藏了同名的類級別變數,所以執行程式碼時會顯示30.
顧名思義,常數是其值在使用過程中不會發生改變的變數。在宣告和初始化變數時,在變數的前面加上關鍵字const,就可以把該變數指定為一個常數:const int a =100;
常數的特點;
使用常數的好處:
C#認可的基本預定義型別並沒有內建於C#語言中,而是內建於.NET Framework中。
例如,在C#中宣告一個int型別的資料時,宣告的實際上是.NET結構System.Int32的一個範例。這表示在語法上,可以把所有的基本資料型別看成支援某些方法的類。
把int i 轉化為string, string s = i.ToString();
在這種便利的語法背後,型別實際上仍儲存為基本型別。基本型別在概念上用.NET 結構表示,所以沒有效能損失。
C#有15個預定義型別,string,object是參照型別。
public enum TimeDay { Morning=0, Afternoon = 1, Evening=2 }
1.列舉是使用者定義的整數型別。
2.從長遠來看,建立列舉可以節省大量時間,減少許多麻煩。使用列舉比使用整數的優勢:
3.在C#中,列舉的真正強大之處是它們在後臺會範例化為派生於基礎類別System.Enum的結構。這表示可以對它們呼叫方法,執行有用的任務。
TimeDay td =TimeDay.Afternoon; Console.WriteLine((td.ToString());
注意因為.NET Framework的執行方式,在語法上把列舉當成結構不會造成效能損失。實際上,一旦程式碼編譯好,列舉就成為基本型別,與int和float類似。
4.從字串中獲取列舉值
TimeDay td = (TimeDay)Enum.Parse(typeof(TimeDay),"afternoon",true); Console.WriteLine((int)td);
要從字串中轉換,需要使用靜態方法Enum.Parse,第一個引數是要使用的列舉型別,第二個是要轉換的字串,第三個是指定在轉換時是否忽略大小寫。
Enum.Parse方法實際上返回一個物件參照(一個字串)————我們需要把這個字串顯示轉換為需要的列舉型別(是一個拆箱操作)。
如果名稱空間的名稱很長,又要在程式碼中多次參照,但不希望該名稱空間的名稱包含在using指令中(例如,避免類名衝突),就可以給
該名稱空間指定一個別名:
using System.Text; using System.Threading.Tasks; namespace Wrox.ProC.basic { class NameSpaceEx { } } namespace ConsoleApplication1 { using Intro = Wrox.ProC.basic;//給Wrox.ProC.basic指定別名Intro class Program { static void Main(string[] args) { Intro::NameSpaceEx nex = new Intro.NameSpaceEx();//範例化NameSpaceEx物件,要使用::修飾符 } } }
C#程式是從Main()方法開始執行的,這個方法必須是類或結構的靜態方法,並且其返回型別必須是int或void。
在編譯C#控制檯或Windows應用程式時,預設情況下,編譯器會在類中查詢與上述簽名匹配的Main()方法,並使這個類方法稱為程式的入口。
如果有多個Main()方法,編譯器就會報錯。
namespace Wrox { class Client { public static int Main() { MathEx.Main(); return 0; } } class MathEx { static int Add(int x,int y) { return x+y; } public static int Main() { int i = Add(5,10); return i; } } }
但是可以使用/main選項,後跟Main()方法所屬類的全名(包括名稱空),明確告訴編譯器把哪個方法作為程式的入口:
csc ConsoleApplication1.cs /main:Wrox.MathEx
在呼叫程式時,可以讓CLR包含一個引數,將命令列引數傳遞給程式。這個引數是一個字串陣列,傳統上稱為args(但C#可以接受任何名稱)。
class Program { static void Main(string[] args) { for (int i = 0; i < args.Length; i++) { Console.WriteLine(args[i]); } } }
使用命令列就可以編譯這段程式碼。
ConsoleApplication1 a b c a b c
C#前處理器指令不會轉化為可執行程式碼中的命令,但會影響編譯過程的各個方面。例如,使用C#前處理器指令可以禁止編譯器編譯程式碼的某一部分。
如果計劃釋出兩個版本的程式碼,即基本程式碼和擁有更多功能的企業版本,就可以使用前處理器指令。
C#提供了其它機制來實現C++指令的功能,如客製化特性。C#並沒有一個像C++那樣的獨立前處理器,所謂的前處理器指令實際上是由編譯器處理的。
儘管這樣,C#仍保留了一些前處理器指令名稱,因為這些命令會讓人覺得就是前處理器。
#define DEBUG
它告訴編譯器存在給定名稱的符號,類似宣告一個變數,但沒有真正的值,只是存在而已。這個符號不是實際程式碼的一部分,而只是在編譯器編譯程式碼
時存在。在C#程式碼中沒有任何意義。
#undef DEBUG
刪除符號
#define 本身沒有什麼用,與其它前處理器指令(特別是#if)結合使用時,它的功能就很強大。
這些指令告訴編譯器是否要編譯某個程式碼塊
#if DEBUG //do something #endif
#if,#elif還支援邏輯運運算元“!”,"==","!=","||",與或...
當編譯器遇到它們時,會分別產生這兩個指令後面的文字作為警告或錯誤。
#if DEBUG #error "you didnot define DEBUG" #endif #warning "dont forget to remove"
#region和#endregion用於把一段程式碼標記為又給定名稱的一個塊
#region Member Field int x; double d; #endregion
它們可以被某些編譯器識別。
#pragma指令可以抑制或還原指定的編譯警告。
#pragma warning disable int i; #pragma warning restore
到此這篇關於C#基本語法的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45