第二章
1.標識符
標識符是一種字符串颠锉,且區(qū)分大小寫
特點:
1.字母和下劃線可以用在任何位置(a-z、A-Z奢浑、_)〖溲В【下劃線可以開頭】
2.數(shù)字不可以放在首位殷费,可以放在其他任何位置。
3.@只允許放在標識符的首位低葫,雖然允許使用但是不推薦常用详羡。
延伸:[@在C#中的用法:
1.忽略轉義字符
例如
string fileName = "D:\\文本文件\\text.txt";
使用@后
string fileName = @"D:\文本文件\text.txt";
2.讓字符串跨行
例如
string strSQL = "SELECT * FROM HumanResources.Employee AS e"
+ " INNER JOIN Person.Contact AS c"
+ " ON e.ContactID = c.ContactID"
+ " ORDER BY c.LastName";
使用@后
string strSQL = @"SELECT * FROM HumanResources.Employee AS e
INNER JOIN Person.Contact AS c
ON e.ContactID = c.ContactID
ORDER BY c.LastName";
3.在標識符中的用法
C#是不允許關鍵字作為標識符(類名、變量名嘿悬、方法名实柠、表空間名等)使用的,但如果加上@之后就可以了
例如
public static void @static(int @int)
{
if (@int > 0)
{
System.Console.WriteLine("Positive Integer");
}
else if (@int == 0)
{
System.Console.WriteLine("Zero");
}
else
{
System.Console.WriteLine("Negative Integer");
}
}
2.關鍵字
關鍵字是對編譯器具有特殊意義的預定義保留標識符善涨。它們不能在程序中用作標識符窒盐,除非它們有一個 @ 前綴。例如钢拧,@if 是有效的標識符蟹漓,但 if 不是,因為 if 是關鍵字源内。
具體用法與釋義
https://www.cnblogs.com/LS520/p/7115435.html
https://msdn.microsoft.com/zh-cn/library/x53a06bb(VS.80).aspx
3.代碼的注釋
第三章:類型葡粒、存儲和變量
1.預定義類型
1.三種非簡單類型:
string:是一個Unicode字符數(shù)組
object:是所有其他類型的基類
dynamic:使用動態(tài)語言編寫的程序集時使用
2.簡單類型-11種數(shù)值類型
3.簡單類型-非數(shù)值類型:char bool
2.dynamic與var的區(qū)別
var 在編譯階段已經確定類型,在初始化時候膜钓,必須提供初始化的值嗽交,而dynamic則可以不提供,它是在運行時才確定類型
1.var聲明一個局部變量只是一種簡化語法颂斜,它要求編譯器根據一個表達式推斷具體的數(shù)據類型
2.var只能用于聲明方法內部的局部變量夫壁,而dynamic可用于局部變量,字段沃疮,參數(shù)
3.表達式不能轉型為var盒让,但能轉型為dynamic
4.必須顯式初始化用var聲明的變量梅肤,但無需初始化用dynamic聲明的變量
例:static void Main(string[] args)
{
//var 在編譯階段已經確定類型
var number = 3;
//dynamic在編譯期間不進行任何的類型檢查,而是將類型檢查放到了運行期
dynamic dyn = 3;
dyn = "hello world";
//runtime eror
//字符串沒有 "fn不存在的方法" 的方法,但在語法檢查時通過邑茄,不會提示語法錯誤
var s = dyn.fn不存在的方法();
Console.ReadKey();
}
var實際上是編譯期拋給我們的“語法糖”凭语,一旦被編譯,編譯期會自動匹配var 變量的實際類型撩扒,并用實際類型來替換該變量的申明,這看上去就好像我們在編碼的時候是用實際類型進行申明的吨些。而dynamic被編譯后搓谆,實際是一個 object類型,只不過編譯器會對dynamic類型進行特殊處理豪墅,讓它在編譯期間不進行任何的類型檢查泉手,而是將類型檢查放到了運行期。
3.C#中int和System.Int32理解總結
int是System.Int32的別名偶器,但是存在爭議
4.什么是委托斩萌?
委托是尋址方法的.NET版本,使用委托可以將方法作為參數(shù)進行傳遞屏轰。委托是一種特殊類型的對象颊郎,其特殊之處在于委托中包含的只是一個或多個方法的地址,而不是數(shù)據霎苗。
委托雖然看起來像是一種類型姆吭,但其實定義一個委托,是定義了一個新的類唁盏。
下面這行代碼内狸,定義了一個委托,使用ILDasm.exe查看其生成的IL代碼如圖所示:
//定義委托厘擂,它定義了可以代表的方法的類型昆淡,但其本身卻是一個類publicdelegateintmethodDelegate(stringstr);
由圖中紅色框線中可以看出,.NET將委托定義為一個密封類刽严,派生自基類System.MulticastDelegate昂灵,并繼承了基類的三個方法。
2.委托與函數(shù)指針的區(qū)別港庄?
1倔既、安全性:C/C++的函數(shù)指針只是提取了函數(shù)的地址,并作為一個參數(shù)傳遞它鹏氧,沒有類型安全性渤涌,可以把任何函數(shù)傳遞給需要函數(shù)指針的地方;而.NET中的委托是類型安全的把还。
2实蓬、與實例的關聯(lián)性:在面向對象編程中茸俭,幾乎沒有方法是孤立存在的,而是在調用方法前通常需要與類實例相關聯(lián)安皱。委托可以獲取到類實例中的信息调鬓,從而實現(xiàn)與實例的關聯(lián)。
3酌伊、本質上函數(shù)指針是一個指針變量腾窝,分配在棧中;委托類型聲明的是一個類居砖,實例化為一個對象虹脯,分配在堆中。
4奏候、委托可以指向不同類中具有相同類型返回參數(shù)和簽名的函數(shù)循集,函數(shù)指針則不可以。
5.** C#中的委托是什么蔗草?事件是不是一種委托咒彤?**
答:委托本質上是一種“方法接口”,它相當于C/C++中的函數(shù)指針咒精,當然它比函數(shù)指針安全镶柱,在C#中通常用于事件處理。
事件不是委托狠轻,不過由于事件的性質決定了處理它的程序邏輯能訪問的參數(shù)奸例,因此,在C#中處理事件的邏輯都包裝為委托向楼。