(多年後回頭學習c#)被遺忘的世界 一 匿名類 與 擴展方法

1.1  匿名類 

               1 、var  與 new 一起使用 創建匿名類 

                      var captain  = new {FirstName="jor",MidName="joker",LastName="bor"};

                       這就創建了一個匿名的 對象   具有 三個屬性 , 該匿名類 繼承 object 。

                      var doctor= new {FirstName="jor",MidName="joker",LastName="bor"};

                     那麼這兩個對象的屬性一樣 就可以 用來 相互賦值

                        captain =doctor;

                    如還有另一個類  實例 person 他也擁有上面的三個屬性 ,那麼就可以 用person  來 初始化上面的對象

                      var captain  = new {person .FirstName,person.MidName,person.LastName};

1.2 擴展方法
                   有許多擴展類的方式。如果有類的源代碼,繼承就是給對象添加功能的好方法。       ˇ
                   但如果沒有源代碼,該怎麼辦?此時可以使用擴展方法,它允許改變一個類,但不需要該類的源       、
                   代碼。
                  擴展方法是靜態方法,它是類的一部分,但實際上沒有放在類的源代碼中。

               Money 類

using system;
namespace Wrox
(           
·
class MainEntryPoint
{
static void Main(string[] args)
(                            
′
Money cash1 = new Money()`
cash1.Amount - 40M;
Console.WriteLine("cash1.Tostring() returns: " + cash1.Tostring())`
Console∶ReadLine();
l
)
public class Money                        ,
(
private decimal amount氵             
·
public decimal Amount
(
get
(
return amount`
)
set
`  (
amount = value;
)
)                                                         `        、
public override string Tostring()
(
return "$" + Amount.Tostring();
)

 

            該類  類需要一個方法AddToAmomtrdec涮 am。mtToAdd,。 但是,由於某種原因,程序集最初的源代碼
            不能直接修改。此時必須做的所有工作就是創建一個靜態類,把方法AddToAmountO添加爲一個靜     
            態方法。對應的代碼如下:

namespace Wrox
(
public statio class MoneyExtension
(
public static void AddToAmount(this Money money,` decimal amountToAdd)
(
money.Amount += amountToAdd`
l
)
)



           注意AddToAmount方法的參數。對於擴展方法,第一個參數是要擴展的類型,它放在this關鍵
           字的後面。這告訴編譯器,這個方法是Money類型的一部分。在這個例子中,Money是要擴展的類
           型。在擴展方法中,可以訪問所擴展類型的所有公有方法和屬性。
           在主程序中,AddToAmount方法看起來像是另一個方法。它沒有顯示第一個參數,也不能對
           它進行任何處理。要使用新方法,需要執行如下調用,這與其他方法相同:
          即使擴展方法是靜態的,也要使用標準的實例方法語法。注意這裏使用cash1實例變量來調用
          AddToAmount,而沒有使用類型名。
          如果擴展方法與類中的某個方法同名,就從來不會調用擴展方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章