1.隐式类型

我们知道强类型语言 C  C++ C#  Java 对变量的定义前必须要确定这个变量是什么类型的   例如  string str="abc";    int num = 12  等等

但是我们知道部分弱类型语言 是没有特定的类型的,例如   javascript  vbscript  php 等

上例可以看出: 我们使用了 var 任何类型 这个类型关键字来定义我们知道的任何类型,并在编译阶段将我们的var类型自动转为了int类型

这是因为 自从 C# 3.0起 编译器可以根据 赋值的情况 自动为我们推断 变量的 类型

这里的person 是一个 Anonymous Type(匿名类型 )类

也就是说如果我们定义的类型在.net 中是存在的那么编译器会自动帮我们确定类型包括匿名类型

这个特性在网站开发中,序列化和反序列化JSON对象时很有用  反序列化时 常常先拿到对象不确定其类型 先 用var 变量类接收

注意与 dynamic 的区别

dynamic 类型 是编译时不确定类型 在执行时才确定类型

通过reflector 反编译后可以看到:

说明dynamic 是object 类型而不是匿名类型

我们看到在运行时候 dynamic变成了list类型

2.匿名类型

   上面提到的匿名类型 先运行时通常 是‘a来标识代表 没有写名字的类型

3.自动属性

我们通过反编译查看IL代码:

setName代码

setName2 代码

这里就是自动添加的代码 用于设置自动属性

4.初始化器

在声明的同时就进行初始化操作

如果有含参数的构造器 则 在初始化器中传入参数,初始化器是在构造方法之后执行的

5.委托

简单的来说 委托是与类平级的 用来传递方法的一种类型

我们知道 类  基本类型  引用类型  的都是可以作为参数传递的

那方法用什么来传递? 我们知道 C# 中有 引用类型  如 类  值类型 如int float  struct 等

那方法是什么类型?---------委托

我们先看一个问题:

大家知道 我们可以将一些基本类型 类  等 作为参数传递给一个方法

那我们如果想将一个方法作为参数该怎么做呢?

直接将方法传进去,显然不行,我们只能讲包含改方法的类作为参数 然后调用类对象的方法

如何将方法直接作为参数传递个另一个方法呢?

用委托实现了方法作为参数传递给另一个方法

同样的我们可以通过放回委托来实现返回方法

6.Lambda表达式

  eg:   

7.扩展方法

 如果我们需要对一个类添加行为该怎么做?

比如我想给String 添加一个方法,这个方法执行后会打招呼

我们知道string 这个类 中是没有hello()这个方法的,那这个方法怎么来的呢,这个是我们自己给他添加的扩展方法,下面我们来看看怎么做到的

添加扩展方法的几个条件

1)必须写在静态类中

2)扩展否方法的第一个参数必须是需要扩展的类型,并且必须要以this 开头

根据上面条件,我们知道我们这个给string类添加的扩展方法

public static class UtilsExtends{

  public static void Hello(this string str){

      Console.WriteLine("Hello");

  }

}

这样就个string类型添加了一个hello方法,这个方法就是在控制台答应hello 字符串

后面继续。。。

C# 与LINQ有关的语言特性的更多相关文章

  1. 与LINQ有关的语言特性

    在说LINQ之前必须先说说几个重要的C#语言特性 一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在fore ...

  2. 偷窥篇:重要的C#语言特性——30分钟LINQ教程

    本文转自:http://www.cnblogs.com/liulun/archive/2013/02/26/2909985.html 千万别被这个页面的滚动条吓到!!! 我相信你一定能在30分钟之内看 ...

  3. LINQ体验(2)——C# 3.0新语言特性和改进(上篇)

    整体来说.Visual Studio 2008和.NET 3.5是建立在.NET2.0核心的基础之上,.NET2.0核心本身将不再变化(假设不了解.NET2.0的朋友,请參看MSDN或者一些经典的书籍 ...

  4. C# 3.0新语言特性和改进(一)

    引言 关于C#3.0的特性,园子里已经有了一大把,可能大家都很熟悉了,虽然本人开发中使用过,但自己还是需要记录一下,总结一下.同时也是后面写Linq知识的基础.希望有兴趣的朋友,可以看看. C# 3. ...

  5. Pro ASP.NET MVC –第四章 语言特性精华

    C#语言有很多特性,并不是所有的程序员都了解本书我们将会使用的C#语言特性.因此,在本章,我们将了解一下作为一个好的MVC程序员需要了解C#语言的特性. 每个特性我们都只是简要介绍.如果你想深入了解L ...

  6. C# 动态语言特性,dynamic 关键字研究

    1       动态语言简介 支持动态特性的语言现在大行其道,并且有继续增长的趋势.比如 Ruby 和 Python, 还有天王级的巨星 --- JavaScript. 现在一个程序员说自己对 Jav ...

  7. 第 4 章—— C# 语言特性(《精通 ASP.NET MVC 5》)

    这里只提供各个特性的简单概括. C# 的完整指南可参阅<Introducing Visual C#>.深度了解 LINQ 可参考<Pro LINQ in C#> 4.1 准备示 ...

  8. 值得推荐的C#不同版本语言特性

    C#语言在不断地版本升级中,为我们提供了很多新的语言特性.其中,有很多使用的语言特性,我觉得在实际开发中用起来很方便,能够简化我们的代码,增强可读性,提高开发效率. 小编不才,在这里给大家整理了一些实 ...

  9. 快速了解C# 8.0中“可空引用类型(Nullable reference type)”语言特性

    Visual C# 8.0中引入了可空引用类型(Nullable reference type),通过编译器提供的强大功能,帮助开发人员尽可能地规避由空引用带来的代码问题.这里我大致介绍一下可空引用类 ...

随机推荐

  1. python大佬养成计划----基于flask_sqlalchemy的网页显示数据库信息

    网页显示数据库信息 使用我们刚学习的flask_sqlalchemy,在网页中显示数据库表中的数据.在开始运行程序前,确保数据库中执行过创建表和创建用户的操作,详见链接描述. # 模板文件templa ...

  2. linux安装mongodb磁盘空间不足

    Insufficient free space for journal filesPlease make at least 3379MB available in /export/servers/mo ...

  3. PAT B1024科学计数法

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指 ...

  4. CSS样式写在JSP代码中的几种方法

    1.行内样式. 可以直接把css代码写在现有的HTML标签元素的开始标签里面,并且css样式代码要写在style=" "双引号中才可以, 如: <p style=" ...

  5. 文档——STM32F10中文参考手册

    ST官方免费的资料.进入官方,第一个就是. 大家不用在CSDN付费下载了!!!!. (https://www.stmcu.org.cn/document/list/index/category-158 ...

  6. python---冒泡排序的实现

    冒泡排序 思想 ​ 列表中有n个数, 每两个相邻的数, 如果前边的数比后边的数大, 就交换. ​ 关键点: ​ 趟: 总共执行 n-1趟 ​ 无序区: 第 i 趟时, 索引 0~ n-1-i 为无序区 ...

  7. 数组-LeetCode-笔试

    目录 数组理论基础 二分查找 二分法第一种写法 二分法第二种写法 ACM 移除元素 暴力解法 双指针法(快慢指针) ACM 有序数组的平方 暴力排序 双指针法 长度最小的子数组 暴力解法 滑动窗口 相 ...

  8. uniapp-uni.setNavigationBarColor 动态修改顶部背景颜色

    uni.setNavigationBarColor({ frontColor: '#ffffff', backgroundColor: "#3583ff" })

  9. vue动态绑定属性--基本用法及动态绑定class

    动态绑定属性v-bind:,语法糖形式:省略v-bind,仅写一个冒号. 一.动态绑定基本属性 1 <body> 2 <!-- v-bind 动态绑定属性-基本用法 --> 3 ...

  10. LevelDB 学习笔记2:合并

    LevelDB 学习笔记2:合并 部分图片来自 RocksDB 文档 Minor Compaction 将内存数据库刷到硬盘的过程称为 minor compaction 产出的 L0 层的 sstab ...