在一個類中導入這個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 = data.NoSpaces();
}
}
}
注意extension方法的優先度比instance方法低。因此如果instance方法和extension方法有同樣的簽名,則應執行instance方法。
3.對象初始化器
在C# 2.0中,開發者認為建立許多構造器來設定某個屬性值為對象初始化過程。下面是一個例子: 類訪問Customer方法:
Customer myCustomer = new Customer("Zach", "Smith");
Customer類構造器:
public Customer(string firstName, string lastName) : this()
{
this.FirstName = firstName;
this.LastName = 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 };