Jimmypony的技术汇总区
很多都不会,很多都不懂,不要浮躁,静心学习
再用2008一段时间了,但是C#3.0的新特性却一直没有学,今天边学边练,体验新特性给我能带来什么便捷。
1.隐含类型局部变量
关键字var 从右边自动识别对象类型,是强类型,且仅限于局部变量
var a = "abc";
var b = new []{1,2,3,5};
var c = null; 不是类型,不能用
var d; 不可以
比如:foreach(var c in list<string>)
{...}

2.扩展方法
不改变现有类型的实例方法的情况下,扩展类的方法。Extention
static class Extention{static void Foo(this string s){...}}

给我的感觉就是对象调用全局方法。。
不需要通过继承方式扩展方法
缺点就是不能override

当出现方法重名时的优先级问题:
当前实例方法
最近的NameSpace的Extention Method
较远的NameSpace的Extention Method


3.对象与集合初始化器
    public class point
    {
        int x, y;
        public int Y
        {get { return y; }set { y = value; }}
        public int X
        {get { return x; }set { x = value; }}
    }
对象初始化
var e = new point { X = 1, Y = 0 };
集合初始化,不需通过ADD方法,以前比如构造个List,都要一个个现在就不用了
var b = new List<string> { "a","b","c","d"};

4.匿名类型
var e_1 = new { Name = "张三", age = 18 };

以下是我自己边学,练手用的测试代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DemosTest;
namespace DemosTest
{
    
//包含2个字段的类
    public class point 
    
{
        
int x, y;
        
public point()
        
{
            Console.WriteLine(
"使用前提,公有无参构造器!");
        }

        
public int Y
        
{
            
get return y; }
            
set { y = value; }
        }


        
public int X
        
{
            
get return x; }
            
set { x = value; }
        }

        
public void read()
        
{
            Console.WriteLine(
string.Format("X={0},Y={1}", x, y));
        }

    }


    
static class Program
    
{
        
//扩展方法
        static void Foo(this string a)
        
{
            Console.WriteLine(
string.Format("this is {0}", a));
        }


        
static void Main(string[] args)
        
{
            var a 
= 10;                                     //int
            var b = "Hello World";                          //string

            var c 
= new List<string> "a","b","c","d"};    //List<T>
            var d = new point { X = 1, Y = 0 };             //对象构造器

            var e_1 
= new { Name = "张三", age = 18 };      //匿名对象,字段read only
            var e_2 = new { Name = "李四", age = 20 };      //对象字段类型同样可以自动识别

            b.Foo();                                        
//调用扩展方法

            
foreach(var temp in c)                          //打印集合成员
                Console.WriteLine(temp);

            d.read();                                       
//打印对象字段
            e_1 = e_2;                                      //只有在结构相同的匿名类型时,才能互相赋值
            Console.WriteLine(e_1);                         //匿名对象的打印结果,什么对象都不是
            Console.ReadKey();
        }

学完这些,感觉在新版C#3.0 微软给我的感觉是越来越灵活,某些程度上感觉方便些。
比如不需要通过继承或者改写类来扩展类的方法,匿名对象在局部使用时,比较方便,不需要构造太多的东西。
但是同时可能会造成滥用后的混乱,和不易维护。
posted on 2008-04-03 13:44  Jim~  阅读(263)  评论(0编辑  收藏  举报