更改密封类的“ToString”

时间:2010-01-22 22:27:50

标签: c# tostring sealed

我正在上课:

public sealed class WorkItemType

ToString很弱(只显示Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemType)。

有没有办法覆盖它以显示WorkItemType的名称?

通常我只会在新类中聚合该值,但我在WPF中使用它来进行绑定(我希望在组合框中有一个WorkItemTypes列表,并将所选值分配给绑定WorkItemType可变的。)

我想我在这里运气不好,但我想我会问。

6 个答案:

答案 0 :(得分:5)

一种相当简洁的方法可能是向WorkItemType对象添加扩展方法。像这样:

public static class ToStringExtension
    {
        public static string MyToString(this WorkItemType w)
        {
           return "Some Stuff"
        }
    }

然后你可以打电话给

WorkItemType w = new WorkItemType;
Debug.WriteLine(w.MyToString();)

答案 1 :(得分:4)

需要来覆盖ToString吗?如果您控制显示对象的代码,则始终可以提供FormatWorkItemType方法或类似的方法。

答案 2 :(得分:2)

你运气不好: - (

您可以编写自己的类来包装WorkItemType并委托给它(代理)期望ToString:

class MyWorkItemType
{
  private WorItemType _outer;

  public MyWorkItemType(WorkItemType outer)
  {
    _outer=outer;
  }

  public void DoAction()
  {
    _outer.DoAction();
  }

  // etc

  public override string ToString()
  {
    return "my value"
  }
}

答案 3 :(得分:1)

我没有任何C#知识,但是你不能将扩展类包装在另一个类中吗?代理所有方法调用扩展类,除了toString(),也非常hackish,但我认为无论如何都要提起它。

答案 4 :(得分:1)

WPF提供了一些不同的内置方法来在UI中执行此操作。我推荐两个:

  • 您可以使用ComboBox DisplayMemberPath显示单个 物业价值,但仍然选择 WorkItemType对象。
  • 如果要显示复合词 你可以改变几个属性 ComboBox的ItemTemplate来实现它 看起来很像你想要的 - 格式化文本,添加边框, 颜色等你甚至可以设置 DataTemplate自动成为 应用于任何WorkItemType对象 它会被绑定到UI中的任何位置 (来自UI的相同基本效果 透视为改变ToString) 将它放入资源并给予 它只是一个没有x:Key的DataType。

答案 5 :(得分:0)

用反射做一些神奇的魔法可能是你唯一的希望。我知道你可以用它来实例化私有构造函数,所以也许你可以覆盖一个密封的类...注意,如果没有别的办法,这应该是你最后的选择。使用反射是一种非常黑客/不正确的方式。