<!-- /* 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# 代码的时候,有vb 和js 的风格。每当看到这样写代码的人,我都会仰视他们。嘿嘿,不过我同时很痛恨他们的代码风格,因为让我看起来很吃力。NND ,跑题了,下面正文
在写js 的时候,我相信大多数和我一样的菜鸟都对var 有着特殊的感情。因为不用考虑类型的转换和其正确性。
你写:var date= new date();date 就是一个日期对象,你写var date =2;date 就是一个int 类型,
同样,你写 var date="abc";date 当然就是一个字符串。
当然,其实我很痛恨这样的写法,因为它让我的代码出现很多由于自己的疏忽而造成的bug ,最后又不得不去反复调试和修改。尤其是在对js 没有很好的调试工具的情况下。在这里我要感谢下ff 的firebug ,终于让我解脱了。顺便bs 一下ie 。
在.net 3.5 中,你可以写这样一段代码,同样是正确的:
int obj=5;
obj="cool";
ojb=new myObject();// 自定义的对象
此时,编译器能自动根据其类型判断,省去了以往装箱和拆箱的操作。从今以后,我们用 is ,as 的地方就少得多了,对类型的纠结少了。但是不意味着可以写代码粗心了。
提示: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;
}
很方便吧,此种适用于,get 和set 里面不需要写逻辑代码的属性声明,且get 和set 必须成对出现,所以,用哪一种写法,还是自己根据需要来写。
三、匿名类型
先来看一段代码:
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(””);