
看現(xiàn)在大神門都開了自己的簡書,跟緊大神們的節(jié)奏,拋棄有道入住簡書。
翻閱了之前的代碼,決定記錄一下C#的改進(jìn)之路和開發(fā)中常用的一些特性,以備不時之需,也方便給需要的人參考。
語法糖 ( Syntactic sugar )
也譯為糖衣語法,是由英國計算機科學(xué)家彼得·約翰·蘭達(dá)(Peter J. Landin)發(fā)明的一個術(shù)語,指計算機語言中添加的某種語法,這種語法對語言的功能和性能并沒有影響,但是更方便程序員使用。通常來說使用語法糖能夠增加程序的可讀性,從而減少程序代碼出錯的機會。
屬性(Property)- 控制變量的訪問
//常規(guī)寫法
public class Product
{
private string _name; //定義一個私有化 變量
public string Name //定義一個 屬性
{
get { return _name; }
set { _name = value; }
}
}
//C# 3.0后,語法做了如下的簡化處理
public class Product
{
public string Name { get; set; } //變量交給編譯器自動生成可看IL代碼
}
//C#6.0后,語法又進(jìn)行了簡化處理 ps:Bob在這里感謝 微軟攻城獅
public class Product
{
public string Name { get; set; } = "Bob"; //屬性直接賦值
//放大招 如果在聲明中已經(jīng)賦值,那么在構(gòu)造函數(shù)中依然不允許,編譯器是位多么稱職的保姆
public string NameGet { get;} //設(shè)置一個只讀屬性
public Product() //構(gòu)造函數(shù)
{
NameGet = "Bob"; //構(gòu)造函數(shù)中可直接給只讀屬性賦初始值 (*?▽?*)
}
}
var類型 - 弱化類型定義
特性:var可替代任何類型,編譯器會根據(jù)上下文來判斷你想用的真正類型,一旦初始完成就不能再給其賦與初始化類型不同的值了。var與object不同,var在效率上和使用強類型方式定義的變量完全一樣,var只能作為局部變量使用,不能用做字段也不能用做參數(shù)聲明。
//常規(guī)定義變量
string name = "白色經(jīng)典長袖襯衫"; // string
int size = 160; // int
ConsoleColor color = ConsoleColor.Blue; // ConsoleColor
//Net3.5后 編譯器會自動判斷變量類型
var name = "白色經(jīng)典長袖襯衫"; // string
var size = 160; // int
var color = ConsoleColor.Blue; // ConsoleColor
//放大招 高端使用
//這招在進(jìn)行json解析的時候非常有用,但僅限簡單結(jié)構(gòu)json
public class Program{
public static void Main(){
// 匿名類
var product = new {
Name = "Bob",
Size
};
}}
//發(fā)現(xiàn)沒foreach里默認(rèn)就是var
foreach (var item in collection){}
擴展方法 - 擴展方法使你能夠向現(xiàn)有類型“添加”方法
public static class MyExtensions
{
static public bool IsUpper(this string input) //定義給string類型加入IsUpper
{
return input == input.ToUpper(); //具體操作
}
}
public class Program
{
public static void Main()
{
var name = "ABC"; //string
var r = name.IsUpper(); //string類型操作中 加入IsUpper
}
}
類實例化 - 簡化構(gòu)造函數(shù)
//先看下這個簡單的類:
public class Product
{
public string Name { get; set; }
public string Size { get; set; }
}
//這個類有兩個屬性,沒有聲明構(gòu)造函數(shù),可以通過下面的方法一步完成對象的實例化和初始賦值
public class Program
{
public static void Main()
{
var product = new Product()
{
Name = "Bob",
Size = "18cm"
};
}
}
集合遍歷 - 簡化集合原理就是 拉姆達(dá)(Lambda)
//通常遍歷集合中的項的代碼是這樣寫的
List<string> Sizes = new List<string> { "L", "XL", "XXL" };
foreach (string size in Sizes)
{
Console.WriteLine(size);
}
//語法糖簡化版
List<string> Sizes = new List<string> { "L", "XL", "XXL" };
Sizes.ForEach(x => Console.WriteLine(x));
委托簡化 - Action(無返回值) and Func(首參數(shù)返回值)
以前寫個委托用delegate 還要寫接口 好麻煩 微軟大大直接封裝了兩個泛型 方便直接用
//Action<參數(shù)類型1,參數(shù)類型2 ·····> 可無參數(shù) ,不用我在說啥是委托吧=-=
public Action<string> AProduct;
public void Main()
{
AProduct = Product;
AProduct("Bob");
}
public void Product(string bob)
{
Console.WriteLine(bob);
}
//func<返回類型,參數(shù)類型1,參數(shù)類型2 ·····> 可無參數(shù)但必須要返回類型
public func<string,int> AProduct;
public void Main()
{
AProduct = Product;
Console.WriteLine(AProduct("Bob"));
}
public string Product(int bob)
{
return bob.ToString();
}
好了就這樣收尾吧! 寫得實在累了 純手打如有不對的地方歡迎指出
版權(quán)聲明:本文為原創(chuàng)文章,未經(jīng)本人允許不得轉(zhuǎn)載