隐含类型局部变量

var i = 5;
var h = 13.4;
var s = "C Sharp";
var intArr = new[] {1,2,3 };
var a = new[] {1,10,100,1000 }; //int[]

var为关键字,可以根据后面的初始化语句自动推断类型。

初始化语句必须为表达式,且编译时可推断类型。

var声明的仅限于局部变量,亦可用于foreach、using等语句中。

数组也可以作为隐含类型。

扩展方法

 class Program
{
static void Main(string[] args)
{ //扩展方法
string s = "hello world";
s.Foo();
}
} public static class Extensions
{
public static void Foo(this string s)
{
//*****
Console.WriteLine("Foo");
Console.Read();
}
}

分析:

s.Foo() 编译器会由实例方法转换为静态方法:Extendsion.Foo(s)。

实例方法被编译的分析:

有一个类:class Person{public void Bar();}

调用:Person p=new Person(); p.Bar();

编译器会把上面的方法转换为void Bar(Person this),然后调用:Bar(p)

这就是我们所说的实例函数里面有一个隐含的this指针。bar方法虽然没有参数,但是在编译的时候,编译器会把它编译出一个参数来,就是它所在的类型(它在person类里面),编译器编译出来的是一个全局函数,有一个this指针,所以在实例函数里可以访问this指针,但是在静态函数里不能访问静态指针。静态函数没有按照这个规则来编译。

其实在编译完之后,根本就不知道所谓的对象、实例函数、静态函数。所有的东西都是全局函数。

总结(扩展一个类的方法):

1、继承它。

2、用包含(组合)的方法,把一个类做为另一个类的字段。

3、反射,可以动态的给一个类添加更多的行为,运行时的方式。

4、扩展,只允许添加不允许更改。(允许我们在不改变源代码的情况下扩展【即添加】现有类型中的实例方法)

对象与集合初始化器

//对象与集合初始化器
    public class Point
    {
        public int X { get; set; }
        public int Y { get; set; }
    }

使用:

var test = new Point { X = 0, Y = 1 };

//集合初始化器
List<int> num = new List<int> { 0,1,2,3,4,5,6};

对象与集合初始化器要点

对象初始化器实际上利用了编译器对对象中对外可见的字段和属性进行按序赋值。

集合初始化器会对初始化器中的元素进行按序调用ICollection<T>.Add(T)。

注意对象初始化器和集合初始化器中成员的可见性和调用顺序。

对象与集合初始化器同样是一编译时技术。

匿名类型

            //匿名类型
var p1 = new {Name="LiuShuai",Age=23 };
var p2 = new { Name="Frank",Age=23};
p1 = p2;
Console.WriteLine(p2.Name);
Console.Read();

大家看一下运行的结果:

可以使用new关键字调用匿名初始化器创建一个匿名类型的对象。

匿名类型直接继承自System.Object。

匿名类型的成员是编译器根据初始化器推断而来的一些读写属性。

C#3.0 语言基础扩充的更多相关文章

  1. PL/0语言编译器的设计与实现

    一.设计任务 1.1程序实现要求 PL/0语言可以看成PASCAL语言的子集,它的编译程序是一个编译解释执行系统.PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关. PL/0的编译程序和 ...

  2. Swift语言指南(一)--语言基础之常量和变量

    原文:Swift语言指南(一)--语言基础之常量和变量 Swift 是开发 iOS 及 OS X 应用的一门新编程语言,然而,它的开发体验与 C 或 Objective-C 有很多相似之处. Swif ...

  3. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...

  4. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...

  5. C#语言基础

    第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...

  6. C语言基础回顾

    第一章 C语言基础 1.  C语言编译过程 预处理:宏替换.条件编译.头文件包含.特殊符号 编译.优化:翻译并优化成等价的中间代码表示或汇编代码 汇编:生成目标文件,及与源程序等效的目标的机器语言代码 ...

  7. 黑马程序员_ C语言基础(二)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述):   1.Hello W ...

  8. 【GoLang】GO语言系列--002.GO语言基础

    002.GO语言基础 1 参考资料 1.1 http://www.cnblogs.com/vimsk/archive/2012/11/03/2736179.html 1.2 https://githu ...

  9. Swift3.0语言教程使用指针创建和初始化字符串

    Swift3.0语言教程使用指针创建和初始化字符串 Swift3.0语言教程使用指针创建和初始化字符串苹果的Swift团队花了不少功夫来支持C的一些基础特性.C语言中为我们提供了指针,Swift也不例 ...

随机推荐

  1. ORACLE调度之基于事件的调度(二)【weber出品】

    一.回顾 调度分基于时间的调度和基于事件的调度. 稍微复习一下前面的只是请浏览:<ORACLE调度之基于时间的调度(一)[weber出品]> 二.知识补充 1.队列:一种数据结构,就像一根 ...

  2. STL中的set容器

    #include <iostream> #include <set> using namespace std; int main() { set<int> s; s ...

  3. 设置windows窗口ICON 【windows 编程】【API】【原创】

    1. ICON介绍 最近开始接触windows 编程,因此将自己所接触的一些零散的知识进行整理并记录.本文主要介绍了如何更改windows对话框窗口的ICON图标.这里首先介绍一下windows IC ...

  4. 设计模式C++实现(1)——工厂模式

    该文章转载自: http://blog.csdn.net/wuzhekai1985 软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中运用了面向对象编程语言的重要特性:封装 ...

  5. 2.2.4 转换 Path

    在NIO.2里可以很容易地合并Path,在两个Path中再创建Path或对Path进行比较: Demo: import java.nio.file.Path; import java.nio.file ...

  6. PHP获取当前文件路径信息的方法

    文件名  test.php 1.__FILE__ 获取 “路径 + 文件名” : /var/www/test/test.php  echo __FILE__; //取得当前文件的路径:用魔术常量 __ ...

  7. python对比两个文件问题

    写一个比较两个文本文件的程序. 如果不同, 给出第一个不同处的行号和 列号. 比较的时候可以使用zip()函数 a=open('test.txt','r') b=open('test2.txt','r ...

  8. 希尔排序(Shell's Sort)的C语言实现

    原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 希尔排序(Shell's Sort)又称“缩小增量排序”(Diminishing Incre ...

  9. Solr4.8.0源码分析(6)之非排序查询

    Solr4.8.0源码分析(6)之非排序查询 上篇文章简单介绍了Solr的查询流程,本文开始将详细介绍下查询的细节.查询主要分为排序查询和非排序查询,由于两者走的是两个分支,所以本文先介绍下非排序的查 ...

  10. latch:library cache

    一:硬解析造成的shared pool latch 争用: 每一个sql被执行之前,先要到library cache中根据hash_value查找parent cursor,这就需要先获得librar ...