2014-03-05 72 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以外的其他东西。

相关问题