隐含类型局部变量

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. [转] UIImage 图像-IOS开发 (实例)

    转自  http://justcoding.iteye.com/blog/1470931 一 UIImageView 简介 UIImageView是显示图片的控件,显示图片时,首先需要把图片加载到UI ...

  2. FFMPEG 截取RTMP直播流图片命令

    CentOS 6.5  yum安装FFMPEG步骤 1. 手动添加yum源配置 vi /etc/yum.repos.d/dag.repo   [dag] name=Dag RPM Repository ...

  3. 【USACO 2.3.2】奶牛家谱

    [题目描述] 农民约翰准备购买一群新奶牛.在这个新的奶牛群中,每一个母亲奶牛都生两小奶牛.这些奶牛间的关系可以用二叉树来表示.这些二叉树总共有N个节点(3 <= N < 200).这些二叉 ...

  4. 用Guava辅助Throwable异常处理

    Guava的 Throwables 工具常常可以让exception处理更方便. Propagation 有时候,你会想把捕获的exception抛到上一个try/catch块.对于 RuntimeE ...

  5. android 调用系统相机

    // 调用相机拍照的请求码 public static final int REQUEST_TAKE_PHOTO_CODE = 1; public static final int REQUEST_T ...

  6. RedHat9上安装jdk

    1.先在windows下载jdk:jdk-6-dlj-linux-i586.bin 2.用ftp上传给linux下 3.chmod 777 jdk-6-dlj-linux-i586.bin 4.将jd ...

  7. asp.net 调用天气所遇到的问题

    由于在项目用了显示天气的功能,原有的调用方法 直接通过      <iframe name="weather_inc" src="http://i.tianqi.c ...

  8. JQUERY1.9学习笔记 之基本过滤器(八) 最后元素选择器

    最后元素选择器 jQuery( ":last" ) 描述:选择与之匹配的最后元素. 例:选择表格的最后一行. <!DOCTYPE html><html lang= ...

  9. Linux 下 将使用Python-Django开发的web应用布置到服务器上(亲测有效)

    写在前面: Django是一个卓越的新一代Web框架,相信使用Python的人对此并不陌生,但将我们完成的web应用布置到到服务器上并不是一件容易的事情. Django详细的教程可以参考http:// ...

  10. Spring Test 整合 JUnit 4 使用

    这两天做Web开发,发现通过spring进行对象管理之后,做测试变得复杂了.因为所有的Bean都需要在applicationContext.xml中加载好,之后再通过@Resource去取得.如果每次 ...