c#&.net 笔记(一)————.net 3.5新特性

来源:互联网 发布:炒股分析软件哪个好 编辑:程序博客网 时间:2024/05/16 14:14

 

 

<!-- /* Font Definitions */ @font-face{font-family:宋体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimSun;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:新宋体;panose-1:2 1 6 9 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:modern;mso-font-pitch:fixed;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:Verdana;panose-1:2 11 6 4 3 5 4 4 2 4;mso-font-charset:0;mso-generic-font-family:swiss;mso-font-pitch:variable;mso-font-signature:536871559 0 0 0 415 0;}@font-face{font-family:"/@宋体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:"/@新宋体";panose-1:2 1 6 9 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:modern;mso-font-pitch:fixed;mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-parent:"";margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;mso-pagination:none;font-size:10.5pt;mso-bidi-font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:宋体;mso-font-kerning:1.0pt;}p{mso-margin-top-alt:auto;margin-right:0cm;mso-margin-bottom-alt:auto;margin-left:0cm;mso-pagination:widow-orphan;font-size:12.0pt;font-family:宋体;mso-bidi-font-family:宋体;} /* Page Definitions */ @page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section1{size:595.3pt 841.9pt;margin:72.0pt 90.0pt 72.0pt 90.0pt;mso-header-margin:42.55pt;mso-footer-margin:49.6pt;mso-paper-source:0;layout-grid:15.6pt;}div.Section1{page:Section1;}-->

 

 一、关键字 var(注意,var是关键字,表示声明,且仍是强类型)

     使用var关键字,很类似于写js的风格。实际上,很多老开发人员,在写c#代码的时候,有vbjs的风格。每当看到这样写代码的人,我都会仰视他们。嘿嘿,不过我同时很痛恨他们的代码风格,因为让我看起来很吃力。NND,跑题了,下面正文

     在写js的时候,我相信大多数和我一样的菜鸟都对var有着特殊的感情。因为不用考虑类型的转换和其正确性。

           你写:var date= new date();date就是一个日期对象,你写var date =2;date 就是一个int类型,

           同样,你写 var date="abc";date 当然就是一个字符串。

     当然,其实我很痛恨这样的写法,因为它让我的代码出现很多由于自己的疏忽而造成的bug,最后又不得不去反复调试和修改。尤其是在对js没有很好的调试工具的情况下。在这里我要感谢下fffirebug,终于让我解脱了。顺便bs一下ie

    .net 3.5中,你可以写这样一段代码,同样是正确的:

          intobj=5;

         obj="cool";

         ojb=new myObject();//自定义的对象

     此时,编译器能自动根据其类型判断,省去了以往装箱和拆箱的操作。从今以后,我们用 isas的地方就少得多了,对类型的纠结少了。但是不意味着可以写代码粗心了。

提示:var只能作为局部变量使用,且不能赋为null,下面两种写法错误

Var i;//error

Var i=null;//error;

二、自动属性。

      很多朋友应该都记得,在初学c++java的时候,你定义一个变量并要对其赋值往往要这样写:

public class myClass
{
    private string _name;
    public string GetName()
    {
        if(string.IsNullOrEmpty(_name))
        {
            return_name;
        }
        else
        {
            return null;
        }
        return "";
    }
    public string SetName(string name)
    {
        _name = name;
    }
}

 

然后c#中出现了属性,大家访问变量更为方便,不过仍嫌繁琐:

    private string _name;
    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

 .net 3.0后的版本出现了自动属性,代码如下:

    public string Name
    {
        get;
        set;
    }

很方便吧,此种适用于,getset里面不需要写逻辑代码的属性声明,且getset必须成对出现,所以,用哪一种写法,还是自己根据需要来写。

三、匿名类型

先来看一段代码:

 

 varobj1 = new { id = 1, name = "dean", money = 5000f };

var obj2 = new{ id = 2, name = "dean", money = 5000f,address="四川省成都市" };

var obj3 = new{ id = 3, name = "daqular", money= 4500f };

以上代码在.net3.0及以后版本是正确的声明。这里的obj1ojb2obj3是直接继承system.objectobject。值得注意的是,这里的obj1obj3是一样的对象,obj2就和他们不同,具体请从代码中分析。

此时,你可以这样调用obj1.id,obj2.address,是不是很爽啊~~~~~。

由上面,你可以猜到,声明匿名数组也大同小异

var intArray =new[] { 2, 3, 5, 6 };

var strArray =new[] { "Hello", "World" };

varanonymousTypeArray = new[]

{

new { Name ="tony", Age = 21 },

new { Name ="dream", Age = 22 }

};

var a =intArray[0];

var b =strArray[0];

var c =anonymousTypeArray[1].Name;

四、更加简洁的对象初始化。

看一段代码先:

有这样一个user类,有idnamemoney三个类型,

以前初始化user类,可能要根据条件不同重载几个初始化函数。或者专门的初始化方法。

现在,你只需要这样写

var newUser = new User { id = 1, Name = "dean", money = 5000f };//初始化了所有参数

var newUser = new User { id = 1, Name = "dean"}

很方便吧。其他如有嵌套类型的请举一反三,不用多说了吧。

五、让代码更加简洁的扩展方法

1、扩展方法是给现有类型添加一个方法;
2
、扩展方法是通过 指定关键字this修饰方法的第一个参数;
3
、扩展方法必须声明在静态类中;
4
、扩展方法要通用对象来调用;
5
、扩展方法可以带参数。

当我们需要用到framework中的一个已有的类的时候,很多情况下,这个类并不能满足我们的要求,以往的做法我们只能继承这个类,然后在子类中添加自己的方法。这是一个可行的办法,但是当框架类为saled的时候,又只有用has-a的原则包含这个类。如今,你可以这样写:

  public static intTestMethod(this string s) 
            { 
                  returns.Length; 
            } 

调用的时候:var ss=”xx”;ss.TestMethod(””);

原创粉丝点击