asp.net中CSharpThinking擴展方法分析
本文實例講述了asp.net中CSharpThinking擴展方法。分享給大家供大家參考。具體分析如下:
一、演變
① 擴展方法特征
1)必須在一個靜態(tài)方法中。
2)至少有一個參數(shù)。
3)第一個參數(shù)必須附加this關鍵字作為前綴。
4)第一個參數(shù)不能有其他任何修飾符(如 out,ref)。
5)第一個參數(shù)的類型不能是指針。
6) 如果擴展方法名稱與類型的方法一樣(如都命名為ToString),則只有類型的方法會被調用,而擴展方法的不會,這是一個優(yōu)先級問題。
② 擴展方法與普通靜態(tài)方法的比較
C#2 時對一個類進行擴展而又不能應用繼承方式時,只能編寫稍微“丑陋”的靜態(tài)方法。C#3允許我們更改靜態(tài)類,來假裝方法是類與生俱來的。
{
// C#2 普通調用方式
string Log2 = ExtensionCompare.GetLogError("C#2 普通靜態(tài)方式");
Console.WriteLine(Log2);
// C#3 擴展方法調用方式
string Log3 = "C#3擴展方法方式".ToLogError();
Console.WriteLine(Log3);
Console.ReadLine();
}
/// <summary>
/// C#2 常規(guī)靜態(tài)方法擴展
/// </summary>
/// <param name="loginfo">格式化信息</param>
/// <returns></returns>
public static string GetLogError(string loginfo)
{
return string.Format("This is C#2 style: {0}", loginfo);
}
/// <summary>
/// C#3 用擴展方法實現(xiàn)的string類型擴展
/// </summary>
/// <param name="loginfo"></param>
/// <returns></returns>
public static string ToLogError(this string loginfo)
{
return string.Format("This is C#3 style: {0}", loginfo);
}
二、擴展方法最大的用途是在Linq中使用。
① Where , Select , OrderBy,
注:排序不會改變原序列的順序及類型,返回一個新序列,這與List.Sort不同,后者會改變序列。所以Linq是無副作用的,除了一些及其的特殊情況。
(dept => new
{
Name = dept.name,
Cost = dept.Employees.Sum(person=>person.Salary);
})
.OrderByDescending(x=>x.Cost);
② 擴展方法更注重結果而非過程理解,這是與靜態(tài)方法的區(qū)別。
希望本文所述對大家的asp.net程序設計有所幫助。
相關文章
Visual Studio(VS2017)配置C/C++ PostgreSQL9.6.3開發(fā)環(huán)境
這篇文章主要為大家詳細介紹了Visual Studio(VS2017)配置C/C++,PostgreSQL9.6.3開發(fā)環(huán)境,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07.NET/C#利用反射調用含ref或out參數(shù)的方法示例代碼
這篇文章主要給大家介紹了關于.NET/C#利用反射調用含ref或out參數(shù)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-09-09使用HttpWebRequest向網(wǎng)站模擬上傳數(shù)據(jù)
使用HttpWebRequest向網(wǎng)站模擬上傳數(shù)據(jù)...2006-09-09分享Visual Studio原生開發(fā)的10個調試技巧
我整理了一些Visual Studio 至少在VS 2008下 原生開發(fā)的調試技巧,下面是我的整理的一些技巧,需要的朋友可以參考下2013-08-08Asp.net Core MVC中怎么把二級域名綁定到特定的控制器上
這篇文章主要介紹了Asp.net Core MVC中怎么把二級域名綁定到特定的控制器上,需要的朋友可以參考下2017-06-06