看现在大神门都开了自己的简书,跟紧大神们的节奏,抛弃有道入住简书。
翻阅了之前的代码,决定记录一下C#的改进之路和开发中常用的一些特性,以备不时之需,也方便给需要的人参考。
语法糖 ( Syntactic sugar )
也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能和性能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
属性(Property)- 控制变量的访问
//常规写法
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后,语法又进行了简化处理 ps:Bob在这里感谢 微软攻城狮
public class Product
{
public string Name { get; set; } = "Bob"; //属性直接赋值
//放大招 如果在声明中已经赋值,那么在构造函数中依然不允许,编译器是位多么称职的保姆
public string NameGet { get;} //设置一个只读属性
public Product() //构造函数
{
NameGet = "Bob"; //构造函数中可直接给只读属性赋初始值 (*╹▽╹*)
}
}
var类型 - 弱化类型定义
特性:var可替代任何类型,编译器会根据上下文来判断你想用的真正类型,一旦初始完成就不能再给其赋与初始化类型不同的值了。var与object不同,var在效率上和使用强类型方式定义的变量完全一样,var只能作为局部变量使用,不能用做字段也不能用做参数声明。
//常规定义变量
string name = "白色经典长袖衬衫"; // string
int size = 160; // int
ConsoleColor color = ConsoleColor.Blue; // ConsoleColor
//Net3.5后 编译器会自动判断变量类型
var name = "白色经典长袖衬衫"; // string
var size = 160; // int
var color = ConsoleColor.Blue; // ConsoleColor
//放大招 高端使用
//这招在进行json解析的时候非常有用,但仅限简单结构json
public class Program{
public static void Main(){
// 匿名类
var product = new {
Name = "Bob",
Size
};
}}
//发现没foreach里默认就是var
foreach (var item in collection){}
扩展方法 - 扩展方法使你能够向现有类型“添加”方法
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
}
}
类实例化 - 简化构造函数
//先看下这个简单的类:
public class Product
{
public string Name { get; set; }
public string Size { get; set; }
}
//这个类有两个属性,没有声明构造函数,可以通过下面的方法一步完成对象的实例化和初始赋值
public class Program
{
public static void Main()
{
var product = new Product()
{
Name = "Bob",
Size = "18cm"
};
}
}
集合遍历 - 简化集合原理就是 拉姆达(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(首参数返回值)
以前写个委托用delegate 还要写接口 好麻烦 微软大大直接封装了两个泛型 方便直接用
//Action<参数类型1,参数类型2 ·····> 可无参数 ,不用我在说啥是委托吧=-=
public Action<string> AProduct;
public void Main()
{
AProduct = Product;
AProduct("Bob");
}
public void Product(string bob)
{
Console.WriteLine(bob);
}
//func<返回类型,参数类型1,参数类型2 ·····> 可无参数但必须要返回类型
public func<string,int> AProduct;
public void Main()
{
AProduct = Product;
Console.WriteLine(AProduct("Bob"));
}
public string Product(int bob)
{
return bob.ToString();
}
好了就这样收尾吧! 写得实在累了 纯手打如有不对的地方欢迎指出
版权声明:本文为原创文章,未经本人允许不得转载