首页 > C# 3.0/3.5语法新特性示例汇总[转]

C# 3.0/3.5语法新特性示例汇总[转]

//作者:杨卫国

//时间:2008年2月21日

//说明:C#语法新特型示例

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;



namespace C3

ExpandedBlockStart.gifContractedBlock.gif
{

    
class Program

ExpandedSubBlockStart.gifContractedSubBlock.gif    
{

        
//新特性1:简单属性,无需另外多写一个私有字段,比较适合于定义实体类

        public class GsunisMan

ExpandedSubBlockStart.gifContractedSubBlock.gif        
{

            
//传统写法,属性必须有一个私有字段

            private int age;

            
public int Age

ExpandedSubBlockStart.gifContractedSubBlock.gif            
{

                
get

ExpandedSubBlockStart.gifContractedSubBlock.gif                
{

                    
return age;

                }


                
set

ExpandedSubBlockStart.gifContractedSubBlock.gif                
{

                    age 
= value;

                }


            }




            
//3.5写法,直接定义即可;

ExpandedSubBlockStart.gifContractedSubBlock.gif
            public string Name getset; }

ExpandedSubBlockStart.gifContractedSubBlock.gif            
public Int64 ID getprivate set; }

        }




        
static void Main(string[] args)

ExpandedSubBlockStart.gifContractedSubBlock.gif        
{

            
//新特性2:隐式类型,隐式类型化本地变量,但必须赋初值,编译器通过初值推导出变量类型

            var i = 10//相当于 int i=10;

            var s = "甘肃紫光软件研发部"//s为String类型; 

ExpandedSubBlockStart.gifContractedSubBlock.gif
            var arrNums = new int[] 3,6,9 };





            
//新特性3:初始化数组的简写方式:new[],可以回忆一下1.1、2.0怎么定义?

ExpandedSubBlockStart.gifContractedSubBlock.gif
            int[] arrNums2 = new[] 1243 };//当然也可以写成:var arrNums2 = new[] { 1, 2, 43 };





ExpandedSubBlockStart.gifContractedSubBlock.gif            
/**//**//**////新特性4:匿名类型,在2.0中有个匿名方法,很容易混淆

ExpandedSubBlockStart.gifContractedSubBlock.gif            var book1 = new { BookName = "《紫光人2007纪念版》", BookNumber = 150,BookPublisher = "甘肃紫光企划部" };

            MessageBox.Show(
string.Format("书名:{0},数量:{1},出版:{2}" ,book1.BookName , book1.BookNumber , book1.BookPublisher));



ExpandedSubBlockStart.gifContractedSubBlock.gif            
/**//**//**////新特性5:对象构造者(实例化时,构造函数后面跟大括号,可直接初始化对象属性),在1.1、2.0中必须先定义,然后初始化

ExpandedSubBlockStart.gifContractedSubBlock.gif            GsunisMan aMan = new GsunisMan() {Name = "杨卫国", Age = 100 };

            MessageBox.Show(
string.Format("编号:{0},姓名:{1},年龄:{2}", aMan.ID,aMan.Name,aMan.Age));



ExpandedSubBlockStart.gifContractedSubBlock.gif            
/**//**//**////新特性6:集合构造者特性。允许List<>等自定义集合像数组一样用大括号赋初值,在以前只有数组才可以的

ExpandedSubBlockStart.gifContractedSubBlock.gif            List<int> listNums = new List<int>() 1354678 };

            MessageBox.Show(listNums.Count.ToString());



            
//新特性7.2,请首先看看下面的新特性7.1;

            string str = "123";

            
bool isNum = str.IsAllNumber();

            MessageBox.Show(isNum.ToString());



            
//新特性8:Linq,作用就不多说了,用法太多,自己找资料看;

            
//从一个集合中找出所有年龄大于55岁的人;

            List<GsunisMan> men=new List<GsunisMan>();            

ExpandedSubBlockStart.gifContractedSubBlock.gif            men.Add(
new GsunisMan{Name="刘备",Age=65});

ExpandedSubBlockStart.gifContractedSubBlock.gif            men.Add(
new GsunisMan { Name = "关羽", Age =60 });

ExpandedSubBlockStart.gifContractedSubBlock.gif            men.Add(
new GsunisMan { Name = "张飞", Age = 50 });

            var man
= from m in men where m.Age>55 select m; //使用Linq,前面几行在准备数据,感觉有些像Sql语句,呵呵

            MessageBox.Show(man.First<GsunisMan>().Name);     //在此仅显示第一个人姓名



            
//新特性9:Lambda表达式"=>",一个简单的例子,用法太多,自己找资料看;

ExpandedSubBlockStart.gifContractedSubBlock.gif
            int[] numbers = 5413986720 };

            
int oddNumbers = numbers.Count(n => n % 2 == 1);    //找出奇数的个数

            MessageBox.Show(oddNumbers.ToString());

           

        }




       

    }


    
static public class ExpandClass

ExpandedSubBlockStart.gifContractedSubBlock.gif    
{

        
//新特性7.1:扩展方法。可在类的外部扩展已有的类,如下是扩展string类,为String类增加一个IsAllNumber方法

        
//!!!此特性在.NET 2.0下不可用!!!

        public static bool IsAllNumber(this string str)

ExpandedSubBlockStart.gifContractedSubBlock.gif        
{

            
foreach (var ch in str)

ExpandedSubBlockStart.gifContractedSubBlock.gif            
{

                
if (!char.IsNumber(ch))

ExpandedSubBlockStart.gifContractedSubBlock.gif                
{

                    
return false;

                }


            }


            
return true;

        }


       

    }


   

}


转载于:https://www.cnblogs.com/craig/archive/2009/05/13/1455651.html

更多相关:

  • 菜鸟一枚,正在学习C++ Gui Qt4,整理很零碎,欢迎批评指正   1.窗口标题: QWidget *window = new QWidget; window->setWindowTitle("Enter Your Age"); **************************************** 关于标题...

  • 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 总体思路是: 比较两个链表头节点,较小的插入新链表指针之后,同时较小链表指针向后移动一位 实现如下: ListNode* mergeTwo...

  • 1.直接调用微软socket对象处理 static void Main(string[] args){try{IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });//在3721端口新建一个TcpListener对象TcpListener listener = new...

  •   现在很多地方都会用到zookeeper, 用到它的地方就是为了实现分布式。用到的场景就是服务注册,比如一个集群服务器,需要知道哪些服务器在线,哪些服务器不在线。   ZK有一个功能,就是创建临时节点,当机器启动应用的时候就会连接到一个ZK节点,然后创建一个临时节点,那么通过获取监听该路径,并且获取该路径下的节点数量就知道有哪些服务...

  • 前台到后台java时data日期类型的转化 在实体类中用@DataTimeFormat,这样设置即使传过来是空的字符串也是可以转的,要和前面传过来的格式一致,如 @XmlElement(name="BeginDate") @DateTimeFormat(pattern="yyyy-MM-dd") private Date begin...