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

本文详细介绍了.NET 3.5中的一些重要新特性,包括var关键字简化变量声明,自动属性减少冗余代码,匿名类型的使用,以及更简洁的对象初始化和扩展方法的应用,帮助开发者更好地理解和利用这些特性提高编程效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

<!-- /* 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 中,你可以写这样一段代码,同样是正确的:

          int obj=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 必须成对出现,所以,用哪一种写法,还是自己根据需要来写。

三、匿名类型

先来看一段代码:

 

  var obj1 = 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 及以后版本是正确的声明。这里的 obj1 ojb2 obj3 是直接继承 system.object object 。值得注意的是,这里的 obj1 obj3 是一样的对象, obj2 就和他们不同,具体请从代码中分析。

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

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

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

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

var anonymousTypeArray = 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 类,有 id name money 三个类型,

以前初始化 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 int TestMethod(this string s) 
            { 
                  return s.Length; 
            } 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值