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 语言基础扩充相关推荐
- 大学c语言基础 Turbo C2.0 (32位/64位通用)
大学c语言基础 Turbo C2.0 (32位/64位通用) 2.0此软件自带dos虚拟环境 介绍 Turbo C2.0不仅是一个快捷.高效的编译程序,同时还有一个易学.易用的集成开发环境.使用Tur ...
- 最全MySQL8.0实战教程 2 SQL语言基础
最全MySQL8.0实战教程 文章目录 最全MySQL8.0实战教程 2 SQL语言基础 2.1 SQL的概述 2.2 SQL的特点 2.3 SQL语言的组成 2.4 语法特点 [黑马程序员MySQL ...
- 系列:iOS开发-C语言基础
#系列:iOS开发-C语言基础 之前也说了iOS中的OC是扩充C的面向对象编程语言 那么无论是从什么角度来说都要首先回顾一下C的内容,虽然很多人在大学的时候都有学习过C语言,一提到谭浩强,我估计90% ...
- Swift语言指南(一)--语言基础之常量和变量
原文:Swift语言指南(一)--语言基础之常量和变量 Swift 是开发 iOS 及 OS X 应用的一门新编程语言,然而,它的开发体验与 C 或 Objective-C 有很多相似之处. Swif ...
- C语言基础-部分基础理论知识汇总
C语言基础-部分理论知识汇总 本文为C语音部分理论知识汇总,主要包含:C语言的特点与程序结构 .基本数据类型.运算符和表达式.基本语句与顺序结构等内容. 本文为个人学习笔记整理,偏向理论知识介绍,具体 ...
- 编译原理课程设计-对pl0语言进行扩充
文章目录 一. 设计目的及要求 1.1 设计目的 1.2 设计要求 1.2.1 要求一 1.2.2 要求二 1.2.3 要求三 二.程序设计 2.1 程序的组织结构 2.1.1 PL/0编译程序函数定 ...
- 51单片机学习1:C语言基础
1 C 语言介绍 C 语言是在 70 年代初问世的. 一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C 语言. 同时由 B.W.Kernighan 和 D.M.Ritchit 合 ...
- C语言基础语法(2遍)
c#title: C语言基础 6.创建并运行第一个C程序 集成开发环境(IDE) 编译器/C语言中的指令-机器指令 VC6版本 安装虚拟机+VC6建议学习 同学帮助安装 编写C程序 1.创建项目,选择 ...
- 【python语言基础】疑难点整理2
[python语言基础]疑难点整理1 第五章 在python语法中,循环体中的语句没有做限制,因此,可以是任何合法语句,当然也可以是循环语句.这样就形成了循环语句的嵌套. while循环语句和for循 ...
- r语言 断轴 画图_R语言基础画图/绘图/作图
R语言基础画图 R语言免费且开源,其强大和自由的画图功能,深受广大学生和可视化工作人员喜爱,这篇文章对如何使用R语言作基本的图形,如直方图,点图,饼状图以及箱线图进行简单介绍. 0 结构 每种图形构成 ...
最新文章
- R语言ggplot2可视化:为可视化图像添加多行标题(multi line title)并将多行标题居中对齐(center align)
- ABP源码分析三十四:ABP.Web.Mvc
- 2017-10-29—英语发音的一些技巧总结
- python网页编程测试_李亚涛:python编写友情链接检测工具
- Nginx 性能优化
- 技术解析:一文看懂 Anolis OS 国密生态 | 龙蜥专场
- 执行带返回参数的存储过程
- python生成器next_Python生成器生成next,python,yieldnext
- 填坑帖 By cellur925
- Eventbus收录
- 2017 ACM-ICPC Asia Shenyang (ICPC亚洲沈阳赛区)
- VMWARE 之 分布式网络交换机
- 简单的喜欢最长远 平凡中的陪伴最心安 懂你的人最温暖
- 数字电子技术课程设计报告——电子脉搏测试仪的设计
- 大家都在努力,你凭什么不努力?
- 基于C++实现视频聊天软件(一)
- 守着大房 心却越来越空
- 油猴Tampermonkey及其脚本的安装
- 12个实用又有趣的工具类网站,每一个都让人欲罢不能
- 将十进制数转换成二进制、八进制、十六进制数算法