当前位置: 首页 > 编程日记 > 正文

[转]C# 2.0新特性与C# 3.5新特性

C# 2.0新特性与C# 3.5新特性

一、C# 2.0 新特性:

1、泛型
List<MyObject> obj_list=new List();
obj_list.Add(new MyObject());

2、部分类(partial)
namespace xxx
{
public partial class Class1
{
private string _s1;
public string S1
{
get { return _s1; }
set { _s1 = value; }
}
}

//或在另一个文件中
public partial class Class1
{
public string GetString()
{
string s = this.S1 + "aaa";
return s;
}
}
}


3、静态类
public static class MyStaticObject
{
private static string _s;
static MyStaticObject()
{
_s = "Hello";
}
public static string Mothed1()
{
return _s + ",world.";
}
}

4、属性访问器可访问性
public class Class2
{
private string _str;
public string Str
{
get { return _str; }
protected set { _str = value; }
}
}

5、可空类型
int? aa = null;
aa = 23;
if (aa.HasValue)
{
int bb = aa.Value;
}


6、匿名方法
class SomeClass //在C#1.0中
{
delegate void SomeDelegate();
public void InvokeMethod()
{
SomeDelegate del = new SomeDelegate(SomeMethod);
del();
}
void SomeMethod()
{
MessageBox.Show("Hello");
}
}

class SomeClass2
{
public delegate void SomeDelegate();
public void InvokeMothed()
{
SomeDelegate del = delegate {
MessageBox.Show("Hello");
};
del();
}
}


7、名称空间别名限定符
global::

二、C# 3.0/3.5 新特性:
1、LinQ(语言集成查询)
以前,查询XML文件使用XPath,数据库刚用SQL,LinQ搜索任何IEnumerable数据源.
在ORM解决方案中,LINQ对象用途很大.
示例:
List customers = new List();
IEnumerable query_result = from c in customers
where c.Money > 100
orderby c.Name
select c;
Linq 包括 Linq to SQL, Linq to Objects, Linq to XML 和 ADO.NET Entity Framework 等几个部分

2、Lambda表达式。更激动人心的,是一种匿名函数结构,它可以方便的实现委托、查询综合和扩展方法的 delegate 类型参数的初始化定义.
示例:原来的:
delegate void Func(int x);
void Add(int x){x++;}
Func f=new Func(Add);
f(1);
可简化为:
Func f=(x)=>{x++;};
或:
Func f=(int x )=>{x++;};


3、隐式类型本地变量。var关键字(类型脚本语言中的隐式声明变量,主要针对LinQ设计)
var num=0;
var nums[]={1,2,3,4,5};
var num='a';
var list=new List();
foreach(var i in nums){
num+=i;
}

4、扩展方法。extension(允许您扩充任何类,甚至是标记为封装的类,对于扩展的方法必须在静态类里来扩展)
示例,在string上实现Count()方法:
using System.Runtime.CompilerService;
public class Extensions{
[Extension()]
public int Count(this string source){
int count = 0;
foreach (var item in source){
count++;
}
return count;
}
}
//使用:
string s="Hello,world!";
int i=s.Count();


5、对象和集合初始值设定项。初始化的简化,写实体类方便了
public class Person{
public string Name{get;set;} //自动实现属性
public int Age{get;set;}
}
var person1=new Person{Name="tang",Age=21}; //...
var persons=new List{ //集合初始化器
new Person{Name="TEW",Age=21},
new Person{Name="RSA",Age=18}
};

6、宽松委托。宽松委托使得 C# 在判断委托实例化赋值时,对于签名不同的函数可以接受。例如 EventArgs 和 MouseEventArgs 是具备继承关系的类,当它们出现在同一个接受 EventArgs 类型参数的委托定义中时,编译器对于这两种委托都能接受。例如:

delegate void A (object sender, MouseEventArgs e);
delegate void B (int a, int b);

EventHandler e1, e2;
e1 = new A(...);    // OK
e2 = new EventHandler(...);   // OK
e1 = e2;    // OK

B b = (long a, int b) +> ...{ };   // OK

7、自动实现属性。

在定义类的属性时,常常需要像下面的代码一样封装一个域。

private string name;

public string Name ...{ get ...{ return name; } set ...{ name = value; } }
C# 3.0 提供了一种简化的属性定义方法,可以实现上述代码的作用。

public string Name ...{ get; set; }
这就是自动实现属性。编译器自动实现类似域封装的代码。不过自动实现属性不能定义只读和只有 get 过程的属性;set 也不能具备访问性描述。

8、匿名类型

匿名类型常常用在查询表达式的结果中,因为这种类型的返回值往往是一个包含一种特定类型的 IEnumerable<T>。例如,要从上面的例子中选出年龄大于 21 岁,身高大于 160 厘米的 Person 集合,可以采用如下形式。

var result = from person in persons where person.Age >= 21 && person.Height >= 160
    select new ...{ Name = person.Name, Age = person.Age, Height = person.Height / 100 };

new { Name = person.Name, Age = person.Age, Height = person.Height / 100 } 是一个匿名类型,编译器将对它做如下声明。

public class _Anonymous_Name_Age_Height ...{
    public string Name;
    public string Age;
    public decimal Height;
}

9、分部方法(partial分部类的分部方法,必须是void返回类型)
// 文件 1.cs
public partial class A{
void B(); //声明
}

// 文件 2.cs
public partial class A{
void B { Console.WriteLine("B invoked."); } //实现
}

这种语法可以把函数的定义和声明分开编写。使用分部方法需要注意:

1、分部方法的类实体必须为 partial。
2、分部方法的返回值必须为 void。
3、如果没有实现分部方法,但却定义了此方法的声明,在使用这个包含分部方法的类时,编译器自动将没有实现的方法签名移除。

相关文章:

你需要了解的load和initialize

NSObject类有两种初始化方式load和initialize load (void)load; 复制代码对于加入运行期系统的类及分类&#xff0c;必定会调用此方法&#xff0c;且仅调用一次。 iOS会在应用程序启动的时候调用load方法&#xff0c;在main函数之前调用 执行子类的load方法前&#xff0c;会…

iOS11、iPhone X、Xcode9 适配指南

2017.09.23 不断完善中。。。 2017.10.02 新增 iPhone X 适配官方中文文档 更新iOS11后&#xff0c;发现有些地方需要做适配&#xff0c;整理后按照优先级分为以下三类&#xff1a; 单纯升级iOS11后造成的变化&#xff1b;Xcode9 打包后造成的变化&#xff1b;iPhoneX的适配一、…

Grape和Sinatra结合使用

Grape && Sinatra Grape(https://github.com/intridea/grape) is a REST-like API micro-framework for Ruby Sinatra(http://www.sinatrarb.com/intro.html) is a DSL for quickly creating web applications in Ruby 可见&#xff0c;Grape适合构建纯Api系统&#xf…

公告三大“罪状”,无人驾驶公司Roadstar联合创始人被罢免

&#xff08;从左至右依次是为周光、佟显乔、衡量&#xff09; 整理 | Jane 出品 | AI科技大本营 1 月 21 日&#xff0c;因技术造假等违规行为&#xff0c;国内自动驾驶创业公司 Roadstar &#xff08;深圳星行科技有限公司&#xff09;官方宣布&#xff0c;罢免联合创始人周…

大雁悲歌,月哭泣

??时间&#xff0c;毫无感情的把这段故事剪成了碎片……??――题记????一??眺望天边那抹残红&#xff0c;心瞬间间抖落成一滴血。??无法愈合的伤口&#xff0c;夜夜繁衍着孤寂。爱,颈椎痛 &#xff0c;这个烂熟于胸的字&#xff0c;有时真是扎心般刺眼&#xff0c;…

写高质量的代码,永不言晚!

作者 | Nitesh sharma 译者 | 弯月责编 | 郭芮出转载自 CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 以下为译文&#xff1a; 在如今这个时代&#xff0c;每个人都在努力提升资源能力。在Web应用程序方面&#xff0c;我们有Spring、Play和Struts等框架&#xff0c;这…

ios searchBar 的代理方法 集合

下面是搜索框控件的一些代理方法&#xff1a; - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar;将要开始编辑时的回调&#xff0c;返回为NO&#xff0c;则不能编辑- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar;已经开始编辑时的回调- (BOOL)…

双绞线接法详解

一直以来很多人&#xff08;包括作者&#xff09;都认为10 base-t 10m网络使用了网线中8条信号线之4条&#xff0c;而100 base-t 100m则使用了全部8条信号线&#xff08;要不怎么那么快呢&#xff1f;&#xff09;。可是作者前不久在使用一条按所谓10m直连接法&#xff08;1与3…

step by step YAML 复用

yaml文件适合用来描述软件测试过程的步骤。当不同类型的CI过程集中在一个yaml文件时&#xff0c;首先碰到的一个问题是&#xff1a;大量重复的步骤如何进行复用&#xff1f; 举个例子&#xff1a; stage1:run_it:exec:- A- B- C- D1stage2:run_it:exec:- A- B- C- D2显然&#…

在winform中从外部拖动节点到树形结构(treeview和listview相互拖动)(一)

最近一个项目要用到从listview向treeview拖动item&#xff0c;达到从外部拖动图标成为树形结构的一部分&#xff0c;通过查阅资料总结了一些实现方式&#xff0c;分享给大家。这是winform中的例子。 在进行拖放操作之前&#xff0c;必须要对进行拖放操作的组件的"AllowDro…

node 模块化 require expores,简易实现原理。

为了更好的理解 Node.js 的 require 实现机制&#xff0c;我实现了一个简易的版本。我们node index.js的时候就是require(./index.js)&#xff0c;话不多说我们直接上代码&#xff1a; 目录index.jsa.jsb.jsc.jsindex.js use strictfunction $require(filepath) {const fs req…

100+Python编程题给你练~(附答案)

整理 | Just 出品 | Python大本营 春节马上就要到了&#xff0c;怎么能让自己在假期里不掉队&#xff1f;今天&#xff0c;营长给大家准备一个项目&#xff1a; 100 编程练习&#xff0c;这些题如果能坚持每天至少完成一道&#xff0c;一定可以帮大家轻松 get Python 的编程技…

为了一窥国足输韩国之后人们的评论,我爬了懂球帝App

【导语】2019亚洲杯决赛正如火如荼进行中&#xff0c;国足的晋级之路可谓用“惊现”二字评论。继1月16日&#xff0c;国足对战韩国队败北后&#xff0c;一名Python学习者为了一窥网友们的评论&#xff0c;特意爬了懂球帝App的数据。最新喜讯是在20日国足对战泰国的比赛中&#…

Mac下mysql服务器安装

Mac下mysql服务器安装 下载mysql 进入http://dev.mysql.com/downloads/mysql/ 下载Mac OS X 10.9 (x86, 64-bit), Compressed TAR Archive 安装 tar -zxvf mysql-5.6.25-osx10.9-x86_64.tar.gz mv mysql-5.6.25-osx10.9-x86_64 mysql cd mysql sudo scripts/mysql_install_db -…

linux查找文件

find . | grep xyz 将当前目录下&#xff08;包括子目录&#xff09;的文件名中含有xyz的文件过滤出来 find . | xargs grep xyz 将当前目录下&#xff08;包括子目录&#xff09;的文件内容中含有xyz的行过滤出来 转载于:https://www.cnblogs.com/anovana/p/8036032.html

Grape Api 笔记

关键字&#xff1a;namespace aliases&#xff1a;group&#xff0c;resources&#xff0c;resources&#xff0c;segment define route parameter: 1. namespace :id 2. param_route :id 关键字before 每次api请求前均执行一次 关键字helpers 1. 定义module&#xff0c;通过…

第一个spring boot应用

前提 首先要确保已经安装了java和maven&#xff1a; $ java -version java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode) $ mvn -v Apache Maven 3.3.9 (bb52d850…

【转载】xp自动校时

招式一. 自由设定XP时间同步间隔 而对于Windows 2000和XP&#xff0c;由于自身已经集成了自动对时功能&#xff0c;就不用像Win98那样麻烦地安装第三方软件了。但系统默认的时间同步间隔只是7天&#xff0c;我们无法自由选择&#xff0c;使得这个功能在灵活性方面大打折扣。其实…

发改委:互联网企业没有出现大规模裁员现象

1 月 22 日&#xff0c;据中国网报道&#xff0c;国家发改委就宏观经济运行情况举行发布会&#xff0c;新闻发言人孟玮就近期互联网行业裁员情况以及就业保障问题予以回应。 孟玮表示&#xff0c;近期国家发改委通过多种方式进行了调研&#xff0c;包括到有关企业进行座谈&…

php操作mysql的常用语句(大全)

SQL分类&#xff1a;DDL—数据定义语言(Create&#xff0c;Alter&#xff0c;Drop&#xff0c;DECLARE)DML—数据操纵语言(Select&#xff0c;Delete&#xff0c;Update&#xff0c;Insert)DCL—数据控制语言(GRANT&#xff0c;REVOKE&#xff0c;COMMIT&#xff0c;ROLLBACK)p…

ElasticSearch + xpack 使用

ElasticSearch 是一个高可用开源全文检索和分析组件。提供存储服务&#xff0c;搜索服务&#xff0c;大数据准实时分析等。一般用于提供一些提供复杂搜索的应。我们为什么要选择 ElasticSearch &#xff1f;因为它是一个准实时的搜索工具&#xff0c;在一般情况下延时少于一秒&…

java coverage exclude使用

使用cobertura&#xff1a;http://mojo.codehaus.org/cobertura-maven-plugin/usage.html 若想要忽略一部分代码&#xff0c;可以通过exclude来指定&#xff1a; <configuration> <instrumentation><excludes><exclude>com/alibaba/ws/gcenter/web/**/…

人工智障?243个机器人被裁

图片源自 Henn-na 官网作者 | 若名出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;全球经济降温&#xff0c;企业裁员消息不断&#xff0c;如果你不能带来显著效益&#xff0c;则很有可能被淘汰&#xff0c;即使是机器人&#xff0c;也难逃被裁的命运。“我们酒店的…

Silverlight C# 游戏开发:Silverlight开发环境

Silverlight C# 游戏开发&#xff1a;Silverlight开发环境 所谓工欲善其事必先利其器&#xff0c;没有好的工具也没有办法做事&#xff0c;我以前曾经想学习C以外的程序语言&#xff0c;当时有java和C#来选择&#xff0c;当时考虑java比较受推崇&#xff0c;可能会比较好一些&a…

算法工程师必须要知道的面试技能雷达图

本文作者王喆&#xff0c;硅谷高级机器学习工程师。转载自知乎专栏&#xff1a;https://zhuanlan.zhihu.com/p/52169807这里是 王喆的机器学习笔记 的第五篇文章&#xff0c;今天我们不聊paper&#xff0c;换一个轻松一点的话题&#xff0c;聊一聊如何准备算法工程师的面试。今…

Qt中文手册 之 QHeaderView

一、 头文件:#include<QHeaderView> 继承自:QAbstractItemView 二、属性 1、cascadingSectionResizes : bool 如果下一区域已经达到最小,是否继续改变下下一个区域的大小。 前提条件是:设置setResizeMode()为interactive 默认是false 相关函数: bool cascadingS…

Linux硬盘性能测试工具 - FIO

1.安装&#xff1a;方法一&#xff1a;直接用指令yum -y install fio方法二&#xff1a;如果方法一不可行则&#xff0c;在官网http://freshmeat.net/projects/fio/下载fio的安装包。安装方法很简单。解压缩后&#xff0c;进入目录输入./configure make make install。2.执行…

linux下vmware tools工具共享

(1.)现在windows 创建一个文件件linux,添加一个test.txt文件(2).虚拟机—设置&#xff08;red hat linux挂载起来&#xff0c;或运行&#xff0c;有的时候都处于禁用状态&#xff0c;如果这样就有关闭red hat linux&#xff0c;然后再进行设置&#xff09;--选项 –文件夹共享—…

在全面部署 IPV6 前,你需要了解都在这儿

IPv6 的发展形势 近日&#xff0c;中办国办印发《推进互联网协议第六版&#xff08;IPv6&#xff09;规模部署行动计划》&#xff08;以下简称《计划》&#xff09;&#xff0c;加快推进基于 IPv6 的下一代互联网规模部署&#xff0c;计划指出到 2018 年末国内 IPv6 活跃用户数…

Qt中文手册 之 QApplication

QApplication管理GUI程序的控制流和主要设置。 QApplication包含由窗口系统和其他来源处理过和发送过的主事件循环。它也处理应用程序的初始化和收尾工作,并提供对话管理。QApplication可以对系统和应用的大部分设置项进行设置。 对于用Qt写的任何一个GUI应用,不管这个应用…