隐含类型局部变量

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. C#设计模式-创建型模式(转)

    一.简单工厂模式 简单工厂模式Simple Factory,又称静态工厂方法模式.它是类的创建模式.是由一个工厂对象决定创建出哪一种产品类的实例,是不同的工厂方法模式的一个特殊实现. 优点: u 模式 ...

  2. JavaScript_数组

    /** * 数组本身也是对象 * js中数组类似于java里的map容器 长度可随意改变 ,元素类型任意 * */ // var arr = new Array(); // var arr = [1, ...

  3. [FindBugs分析记录]Class defines clone() but doesn't implement Cloneable

    官网解释: This class defines a clone() method but the class doesn't implement Cloneable. There are some ...

  4. bootstrap首页制作

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>我的 ...

  5. underscorejs-sortBy学习

    2.17 sortBy 2.17.1 语法 _.sortBy(list, iteratee, [context]) 2.17.2 说明 返回一个排序后的list拷贝副本. list为集合,如数组.对象 ...

  6. MYSQL一对多,两表查询合并数据

    select a.askid,a.title,GROUP_CONCAT(b.message SEPARATOR '----') as content from gg_ask as a join gg_ ...

  7. ECharts 是一款开源

    ECharts

  8. apache 修改端口号 修改根目录 建立多个网站

    修改apache端口号选择Apache下的httpd.conf,查找:Listen,你会看到 #Listen 12.34.56.78:80Listen 80把80改成90,保存就好了 修改WampSe ...

  9. php防止sql注入函数

    $magic_quotes_gpc = get_magic_quotes_gpc(); @extract(daddslashes($_COOKIE)); @extract(daddslashes($_ ...

  10. Delphi-CompareText 函数

    函数名称 CompareText 所在单元 System.SysUtils 函数原型 function CompareText(const S1, S2: string): Integer; 函数功能 ...