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#代码的时候,有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中,你可以写这样一段代码,同样是正确的:
intobj=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必须成对出现,所以,用哪一种写法,还是自己根据需要来写。
三、匿名类型
先来看一段代码:
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及以后版本是正确的声明。这里的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" };
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类,有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 intTestMethod(this string s)
{
returns.Length;
}
调用的时候:var ss=”xx”;ss.TestMethod(””);
- c#&amp;amp;amp;.net 笔记(一)————.net 3.5新特性
- Spring.Net&amp;amp;amp;amp;amp;NHibernate 学习
- asp.net && javabeans && database
- javaScript——&
- Uchome1.2 &amp;&amp; 1.5 代码学习——common.php
- AMP
- AMP
- amp
- TweenLite&amp;amp;&amp;amp;TweenMax系列(一)
- .NET 3.5 发布功能强大的新控件(Winform&WebForm) —— Chart
- Centos7 &amp; Docker &amp; Jenkins &amp; ASP.NET Core
- Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET&nbs
- C#&..NET初学印象
- Android学习笔记(一) —— Android Architecture & Basics
- CSDN&amp;《程序员》杂志创始人——蒋涛 推荐
- LSA&PLSA—潜在语义模型&概率…
- C++AMP介绍(一)
- ASP.NET学习笔记--DropdownList&amp;amp;ListBox连动菜单
- 安装ASPAJAXExtSetup报错
- JavaScript常用函数以及语法
- (十二)幸福之家 - 1
- ubuntu eclipse按钮失效解决方法
- 查看系统信息
- c#&amp;amp;amp;.net 笔记(一)————.net 3.5新特性
- 不是我不相信,这世界太。。。
- C++学习笔记--explicit关键字
- 单双精度浮点数的IEEE标准格式
- 近7个月的专业学习总体计划
- &ldquo和&rdquo编码
- [转]静态链接库LIB和动态链接库DLL的区别 创建和示例
- Understanding Memory Sections in config.bib, boot.bib, and OEMAddressTable in Windows CE 5.0 and 6.0
- 浮点数在内存中的存储方式