C#3.0 语言基础扩充
隐含类型局部变量
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 语言基础扩充的更多相关文章
- PL/0语言编译器的设计与实现
一.设计任务 1.1程序实现要求 PL/0语言可以看成PASCAL语言的子集,它的编译程序是一个编译解释执行系统.PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关. PL/0的编译程序和 ...
- Swift语言指南(一)--语言基础之常量和变量
原文:Swift语言指南(一)--语言基础之常量和变量 Swift 是开发 iOS 及 OS X 应用的一门新编程语言,然而,它的开发体验与 C 或 Objective-C 有很多相似之处. Swif ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...
- C#语言基础
第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...
- C语言基础回顾
第一章 C语言基础 1. C语言编译过程 预处理:宏替换.条件编译.头文件包含.特殊符号 编译.优化:翻译并优化成等价的中间代码表示或汇编代码 汇编:生成目标文件,及与源程序等效的目标的机器语言代码 ...
- 黑马程序员_ C语言基础(二)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述): 1.Hello W ...
- 【GoLang】GO语言系列--002.GO语言基础
002.GO语言基础 1 参考资料 1.1 http://www.cnblogs.com/vimsk/archive/2012/11/03/2736179.html 1.2 https://githu ...
- Swift3.0语言教程使用指针创建和初始化字符串
Swift3.0语言教程使用指针创建和初始化字符串 Swift3.0语言教程使用指针创建和初始化字符串苹果的Swift团队花了不少功夫来支持C的一些基础特性.C语言中为我们提供了指针,Swift也不例 ...
随机推荐
- 深入理解offsetTop与offsetLeft
做为走上前端不归路的我,以前只是认为offsetTop是元素的左边框至包含元素offsetParent的左内边框之间的像素距离,同理offsetRight是相对于上内边框.那么问题来了,包含元素off ...
- KNN(k-nearest-neighbor)算法
一.算法概述 该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别.KNN算法中, 所选择的邻居都是已经正确分类的对象(训练 ...
- MySql数据库索引优化注意事项
设计好MySql的索引可以让你的数据库飞起来,大大的提高数据库效率.设计MySql索引的时候有一下几点注意: 1,创建索引 对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简单的就是因为 ...
- html5--canvas学习笔记
1. 添加<canvas>元素 right: <canvas id="myCanvas" width="300" height="3 ...
- element的height与width
关于一个element所有的高度宽度 ele.style.width,ele.style.height:操纵style样式.+"px" offsetWidth.offsetHeig ...
- PHP mongoDB 操作
<?php /** * PHP操作MongoDB学习笔记 */ //************************* //** 连接MongoDB数据库 **// //************ ...
- 工具函数之JS
1. 判断元素是否有滚动条 /* 检测元素是否出现滚动条 @param [object HTMLElement] elm The HTMLElement object @return [Object] ...
- 判断input checkbox选中状态
$("#IsAdmin").is(':checked') 判断收否选中 返回true 或者false
- noi 3531 判断整除
3531:判断整除 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 一个给定的正整数序列,在每个数之前都插入+号或-号后计算它们的和.比如序列:1.2.4共有 ...
- Android 子线程中进行UI操作遇到的小问题
今天在学习<第一行Android代码>第9章-子线程进行UI操作时遇到了一些问题. 代码是这样的: ... import java.util.logging.Handler; ... pu ...