理解的五项主要改进覆盖
1. 隐型局部变量
C# 3.0引入了一个叫做“var”的新关键字。这个关键字允许开发者建立一个变量,但不必明确它的类型。例如,用var说明一个字符串,就像这样:
varmyData = \"This is my data\";
注意,这里并没有提到myData变量是一个字符串,而C# 2.0却要求这一点。
虽然var允许您建立隐含的类型,它并没有降低C#浓厚的类型特征。var关键字只有在建立变量时有用,一旦您建立变量并且确定它的类型以后,就不能再用var来改变一个变量的类型。
例如,这段代码没有作用:
varmyDate = w;
myDate = \"Hello.\";
使用var关键字还会产生一个有趣的结果,它可以帮助开发者减少建立变量时的代码输入。例如,在C# 2.0中建立一个Customer对象,需要输入以下代码:
Customer myCustomer = new Customer();
使用新的var关键字,则只要输入:
varmyCustomer = new Customer();
var关键字的另一个特点在于,使用它可以避免改变一个返回某个类型对象的方法调用。例如,在C# 2.0中,如果您需要调用一个返回Customer对象的方法,您应该编写以下代码:
Customer myCustomer = GetByName(\"Zach\");
如果某个时候GetByName方法返回一个不是Customer的对象,这段代码就无法编译。但是,如果应用var关键字,您就不用担心GetByName返回的对象类型。
varmyData = GetByName(\"Zach\");
现在,因为应用了var关键字,GetByName方法能够进行改变,返回一个Person对象,这个方法调用也依然有效。
tension方法
在C#中,您不能继承和扩充用访问标识符标记为“封装”的类型。但在C# 3.0中,extension方法允许您扩充任何类,甚至是标记为封装的类。例如,如果希望添加一个NoSpaces()方法到字符串类中,我们要定义一个类似列表A中的extension方法。
列表A
namespaceMyExtensionMethods
{
public static class Extension
{
public static void NoSpaces(this string data)
原文链接: {
return place(\" \", \"\");
}
}
}
在一个类中导入这个extension方法时,开发者就能够对这个类包含的任何字符串调用NoSapces()方法。
extension方法的第一个参数决定extension方法的有效类型。在这种情况下,“这个字符串数据”(this string data)表明extension方法适用于字符串类;如果extension方法以“这个对象数据”(this object data)为第一个参数,则说明这个方法对每个对象有效。
要表明您希望导入extension方法,只需在它们的命名空间中包括一个using指令。例如,要应用上面说明的方法,需要在类文件中包括一个using MyExtensionMethods指令:(列表B)
列表B
usingMyExtensionMethods;
namespace MyNamespace
{
public class MyClass
{
public MyClass()
{
string data = \"this is my data\";
//nospaces will contain \"thisismydata\".
string nospaces = Spaces();
}
}
}
注意extension方法的优先度比instance方法低。因此如果instance方法和extension方法有同样的签名,则应执行instance方法。
3.对象初始化器
在C# 2.0中,开发者认为建立许多构造器来设定某个属性值为对象初始化过程。下面是一个例子:
类访问Customer方法:Customer myCustomer = new Customer(\"Zach\", \"Smith\");
Customer类构造器:public Customer(string firstName, string lastName) : this()
{
rstName = firstName;
stName = lastName;
}
public Customer()
{
}
C# 3.0介绍了一个初始化对象的新方法,它允许您在初始化对象时设定任何属性值。例如,在C# 3.0中,上面的代码块可以写成:
类访问Customer方法:Customer myCustomer = new Customer{FirstName = \"Zach\", LastName = \"Smith\" };
Customer类构造器:public Customer()
{
}
在C# 3.0代码中,没有与初始化对象对应的构造器。这样,开发者就不用为每组需要设定的属性建立不同的构造器。
这样产生的另外一个效果是:代码变得更容易阅读了。例如,虽然我们清楚知道下面的代码对一个Car对象进行了初始化,但我们并不清楚其中变量的作用:
Car car = new Car(18, 10, 550);
一眼看来,下面这行代码更易阅读,尽管我们必须输入更多代码:
Car car = new Car { WheelDiameter = 18, WheelWidth = 10, Horsepower = 550 };
太原治疗白癜风缬沙坦氨氯地平片(Ⅰ)与氨氯地平贝那普利片Ⅱ的区别
南宁治疗宫颈糜烂费用多少钱
- 上一页:理解与客户端缓存之协计划
- 下一页:理解新特性之牛
-
请远离职场潜规则,借助于利他思维,成就职场新高度
01 什么叫其本质主义?什么是其本质尊严? 就是把正正内心一定会的,让他...
2023-09-12
-
怎样来使小红书给微信引流 ?
我是卢松松,点点纸片的肖像,欢迎关注我哦! 爱美的男孩子手机里一定有...
2023-09-08
-
三伏将至,吃好这些,随身携带你满血过夏天
丝丝太阳风三伏热,方知风露九秋凉虽然现在还没有进到三伏天心但是心温已...
2023-09-03
-
适合卧室的4种树,“招财进宝”寓意美好,除尘杀菌空气清新
适当隔壁的4种树,“招财进宝”取意美好,;还有杀菌湿气清新 现在人们的...
2023-09-01
-
奥尼尔笑了,尴尬纪录终于被打破,UGC“高光”表现篮网输球不冤
112比116,温火队在G4再度失守,以被横扫的方式则在主场遭淘汰,布鲁克林真...
2023-08-31
-
俗语“穷搬家,良迁坟”是何意?后一句更显智慧,对你或许有用
比如说,在东亚上下五千年之中,还给我们的人文瑰宝数之不尽。合理化令人...
2023-08-30