2014-03-05 106 views
0

我班有看起來像這樣的屬性:是否可以將方法調用添加到不是類/對象的屬性?

public string DueDateAsString 
{ 
    get 
    { 
     DateTime duedate = this.RigActionType.FrequencyType.GetDueDateForAction(this); 
     if (this.HasBeenCompleted(duedate)) 
     { 
      return "Completed"; 
     } 
     else if (DateTime.Compare(DateTime.Today, duedate) > 0) // past due 
     { 
      return duedate.ToString() + " (past due)"; 
     } 

     return duedate.ToString(); 
    } 
} 

我想擴展功能多一點,這樣這也可能「因在n天后」,但在某種程度上返回類似我不不必創建一個名爲VerboseDueDateAsString(或其他)的獨立屬性。

是否有可能做這樣的事情:

someObject.DueDateAsString; // Outputs "4/1/2014" 
someObject.DueDateAsString.Verbose; // Outputs "Due in x days" 
+1

這可能是,如果你想返回自定義類而不是'string',但我不認爲這是個好主意。 – MarcinJuraszek

回答

3

您可以將截止日期作爲屬性公開,併爲轉換創建擴展方法。將其放置在一個靜態類中,其名稱空間在需要時可見。

public static string Verbose(this DateTime date) 
{ 
    return String.Format("Due in {0} days", (DateTime.Now - date).Days); 
} 

然後直接將其應用到截止日期

Console.WriteLine(someObject.DueDate.Verbose()); 

如果更換了類似exetension方法中的實際屬性,你會得到顯示截止日期

public static string Concise(this DateTime date) 
{ 
    // Place the logic of DueDateAsString here 
} 
的consitent方式
Console.WriteLine(someObject.DueDate.Concise()); 
0

DueDateAsString將需要一個對象,它本身含有Verbose方法AFAIK

1

DueDateAsString並沒有真正看起來像它應該是一個屬性首先。

struct DueDate { 
    DateTime date; 
    bool completed; 

    public DueDate(DateTime date, bool completed) { 
     this.date = date; 
     this.completed = completed; 
    } 

    public override string ToString() { 
     if (this.completed) { 
      return "Completed"; 
     } 

     if (DateTime.Compare(DateTime.Today, duedate) > 0) // past due 
     { 
      return duedate.ToString() + " (past due)"; 
     } 

     return duedate.ToString(); 
    } 

    public string ToVerboseString() { 
     // Implement this 
    } 
} 
⋮ 
public DueDate DueDate 
{ 
    get 
    { 
     DateTime duedate = this.RigActionType.FrequencyType.GetDueDateForAction(this); 

     return new DueDate(duedate, this.HasBeenCompleted(duedate)); 
    } 
} 

可以DateTime使用擴展方法,但後來還是有確定是否它完成與否的問題。順便說一下,將其命名爲DueDate以外的其他東西。

相關問題