我正在上课:
public sealed class WorkItemType
ToString
很弱(只显示Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemType
)。
有没有办法覆盖它以显示WorkItemType
的名称?
通常我只会在新类中聚合该值,但我在WPF中使用它来进行绑定(我希望在组合框中有一个WorkItemTypes列表,并将所选值分配给绑定WorkItemType
可变的。)
我想我在这里运气不好,但我想我会问。
答案 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中执行此操作。我推荐两个:
答案 5 :(得分:0)
用反射做一些神奇的魔法可能是你唯一的希望。我知道你可以用它来实例化私有构造函数,所以也许你可以覆盖一个密封的类...注意,如果没有别的办法,这应该是你最后的选择。使用反射是一种非常黑客/不正确的方式。