C#编程的新语法积累

1、自动属性

之前的实现方式:

private int  id;
public int Id
{
    set {id = value;}
    get {return id;}
}

现在可通过自动属性实现: public int Id{ get;  set; }

2、推断类型(var):推断类型,又名隐式类型,使用var关键字,可以是内置类型、匿名类型、用户定义类型或 .NET Framework 类库中定义的类型。

从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型 var。隐式类型的本地变量是强类型变量,但由编译器确定类型。

下面的两个 i 声明在功能上是等效的:

var i = 10; // implicitly typed
int i = 10; //explicitly typed

使用 var 声明局部变量的各种方式:

// i is compiled as an int
var i = 5;

// s is compiled as a string
var s = "Hello";

// a is compiled as int[]
var a = new[] { 0, 1, 2 };

// expr is compiled as IEnumerable<Customer>
// or perhaps IQueryable<Customer>
var expr =
    from c in customers
    where c.City == "London"
    select c;

// anon is compiled as an anonymous type
var anon = new { Name = "Terry", Age = 34 };

// list is compiled as List<int>
var list = new List<int>();

小结:

[1]变量必须在声明的同时被初始化,编译器要根据初始化值推断类型;初始化表达式不能是null;例如不能用var a; 或 var a = null;声明。

[2]该类型在第一次声明时已具有类型。例如:var a=1; a="";  //报错,因为前面var a=1;已经推断出a为整形了,所以不能把字符串赋值给整形
[3]var 变量不能作为全局变量使用,被声明的变量是一个局部变量,而不是静态或实例字段;
[4]初始化不是一个匿名函数;
[5]语句中只能声明一次变量,声明后不能更改类型;
[6]赋值的数据类型必须是可以在编译时确定的类型;
3、参数默认值

实例如下:

void DefaultPara(int age=10,string name="Jack")
{
	Console.WriteLine(age+":"+name);
}  

测试:
defaultPara();       	//输出10:Jack
defaultPara(15);     	//输出15:Jack
defaultPara(20,"Mary");	//输出20:Mary

注意:只给name参数时,应用参数名;例如DefaultPara(name:"John");  //输出10:John;

4、对象、集合初始化器

public class User {

public int name{ get;  set; }

public int age{ get;  set; }

}

[1]对象初始化器:User user = new User(){name:"Jack",age:18};

[2]集合初始化器:List<User> list = new List<User>(){new user(){name:"Jack",age:18}, new user(){name:"Mary",age:21}}

[3]数组初始化器:string[] str = {"123", "456", "789"}

5、匿名类:属性名字或顺序不同生成不同的泛型类

[1]编译后会生成一个 泛型类:var user= new { name = "James", age = 18 };

[2]如果另一个 匿名类对象 的属性 类型和顺序 一样,那么会共用同一个匿名类!

var user1= new { name = "James2", age = 19 };   Console.WriteLine(user.GetType() == user1.GetType());//true

[3]如果另一个匿名类对象 的属性名称和顺序一样,但类型不一样,那么还是使用相同的匿名类,只不过,泛型参数改变而已

var user2= new { name = 123, age = "James3" };    Console.WriteLine(user1.GetType()==user2.GetType());//true

[4]如果属性名相同,类型相同,但是顺序不同,那么也会重新创建一个匿名类!

var user3 = new { age = 19, name = "James4" };     Console.WriteLine(user3.GetType() == user4.GetType());//false

时间: 2024-10-07 18:05:09

C#编程的新语法积累的相关文章

.NET中那些所谓的新语法之三:系统预定义委托与Lambda表达式

开篇:在上一篇中,我们了解了匿名类.匿名方法与扩展方法等所谓的新语法,这一篇我们继续征程,看看系统预定义委托(Action/Func/Predicate)和超爱的Lambda表达式.为了方便码农们,.Net基类库针对实际开发中最常用的情形提供了几个预定义好的委托,这些委托可以直接使用,无需再重头定义一个自己的委托类型.预定义委托在.Net基类库中使用的比较广泛,比如在Lambda表达式和并行计算中都大量地使用,需要我们予以关注起来! /* 新语法索引 */ 1.自动属性 Auto-Impleme

总结常见的ES6新语法特性。

前言 ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数(=>).class等等.用一句话来说就是: ES6给我们提供了许多的新语法和代码特性来提高javascript的体验 不过遗憾的是,现在还没有浏览器能够很好的支持es6语法,点这里查看浏览器支持情况,所以我们在开发中还需要用babel进行转换为CommonJS这种模块化标准的语法. 因为下面我会讲到一

C#7的新语法

C#7为C#语言添加了许多新功能: out变量: 您可以将out内联值声明为使用它们的方法的参数. 元组 您可以创建包含多个公共字段的轻量级,未命名的类型.编译器和IDE工具可以理解这些类型的语义. 模式匹配 您可以根据这些类型的成员的任意类型和值创建分支逻辑. ref 当地人和回报 方法参数和局部变量可以是对其他存储的引用. 本地功能 您可以将功能嵌套在其他功能中,以限制其范围和可见性. 更健康的成员 可以使用表达式创作的成员列表已经增加. throw 表达式 您可以在以前不允许的代码结构中抛

总结常见的ES6新语法特性

总结常见的ES6新语法特性 ES6给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数(=>).class等等.用一句话来说就是: ES6给我们提供了许多的新语法和代码特性来提高javascript的体验 不过遗憾的是,现在还没有浏览器能够很好的支持es6语法,点这里查看浏览器支持情况,所以我们在开发中还需要用babel进行转换为CommonJS这种模块化标准的语法. 因为下面我会讲到一些es6新特性的例子,如果想要

队列与DelphiXe新语法

好久没写代码了,更久没上博客园的博客了,无聊写几行试一下新语法. 1 unit Main; 2 3 interface 4 5 uses 6 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 7 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, 8 9 iHome.Help

.NET中那些所谓的新语法之一:自动属性、隐式类型、命名参数与自动初始化器

开篇:在日常的.NET开发学习中,我们往往会接触到一些较新的语法,它们相对以前的老语法相比,做了很多的改进,简化了很多繁杂的代码格式,也大大减少了我们这些菜鸟码农的代码量.但是,在开心欢乐之余,我们也不禁地对编译器内部到底为我们做了哪些事儿而感到好奇?于是,我们就借助反编译神器,去看看编译器到底做了啥事!其实本篇中很多都不算新语法,对于很多人来说可能都是接触了很久了,这里主要是针对.NET的老版本来说,是一个“相对”的新语法. /* 新语法索引 */ 1.自动属性 Auto-Implemente

.NET中那些所谓的新语法之四:标准查询运算符与LINQ

开篇:在上一篇中,我们了解了预定义委托与Lambda表达式等所谓的新语法,这一篇我们继续征程,看看标准查询运算符和LINQ.标准查询运算符是定义在System.Linq.Enumerable类中的50多个为IEnumerable<T>准备的扩展方法,而LINQ则是一种类似于SQL风格的查询表达式,它们可以大大方便我们的日常开发工作.因此,需要我们予以关注起来! /* 新语法索引 */ 1.自动属性 Auto-Implemented Properties 2.隐式类型 var 3.参数默认值 和

一起学习c++11——c++11中的新语法

c++11新语法1: auto关键字 c++11 添加的最有用的一个特性应该就是auto关键字. 不知道大家有没有写过这样的代码: std::map<std::string, std::vector<std::shared_ptr<std::list<T> > > > map; std::map<std::string, std::vector<std::shared_ptr<std::list<T> > > >

Qt 学习之路:深入 Qt5 信号槽新语法

在前面的章节(信号槽和自定义信号槽)中,我们详细介绍了有关 Qt 5 的信号槽新语法.由于这次改动很大,许多以前看起来不是问题的问题接踵而来,因此,我们用单独的一章重新介绍一些 Qt 5 的信号槽新语法. 基本用法 Qt 5 引入了信号槽的新语法:使用函数指针能够获得编译期的类型检查.使用我们在自定义信号槽中设计的Newspaper类,我们来看看其基本语法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26