2013-03-25 37 views
0

我有以下的expando對象如何使用ExpandoObject重載方法?

dynamic person = new ExpandoObject(); 
     person.FirstName = " FirstName "; 
     person.SecondName = " FirstName "; 
     person.FullName = person.FirstName + person.SecondName; 
     person.BirthDate = new DateTime(1990, 1, 1); 

     person.CalcAge = (Func<int>) 
      (() => DateTime.Now.Year - person.BirthDate.Year); 

我定義CalcAge方法來計算年齡。我想補充一點,有一個像下面

person.CalcAge = (Func<DateTime, int>) 
      ((DateTime date) => date.Year - person.BirthDate.Year); 

參數重載的方法我如何能實現它與ExpandoObject其中我可以做到以下?

int age1 = person.CalcAge(); 
MessageBox.Show(age1.ToString()); 

int age2 = person.CalcAge2(new DateTime(1980, 1, 1)); 
MessageBox.Show(age2.ToString()); 
+2

將來,請將代碼添加爲* text *而不是截圖。 – 2013-03-25 08:03:01

+0

@Jon我現在做了..謝謝 – 2013-03-25 08:20:20

+0

'CalcAge'的計算是錯誤的:( – leppie 2013-03-25 08:22:59

回答

3

我不相信你可以。我強烈建議您創建一個名爲類型的新的。它看起來像你知道你想創建的所有屬性和方法 - 所以只需創建一個Person類型。 ExpandoObject在某些情況下很有用,但不要指望它能夠處理所有事情。

如果你真的想用這個功能的動態對象,你需要從DynamicObject派生類來代替 - 這樣你可以實施超載,如果你想(通過攔截方法調用)。

+0

Jon Skeet!我知道這是一箇舊的帖子,我希望你看到這個:-)你可能知道一個圖書館有像ExpandoObject,並允許重載的方法?如果我自己實現這個,我應該如何實現方法解析(假設我想模仿C#的行爲)?謝謝。 – 2015-02-15 23:54:53

+1

@AK_:不,我不知道任何事情,恐怕。實現C#重載規則會很難* - 這裏有很多複雜的東西。 – 2015-02-16 06:48:05