这个技巧的关键部分是这个方法(在Java中),它覆盖了 Date 类的特定实例上的 ToString()。
private Date namedDate(final String name, final Date date) {
return new Date(date.getTime()){
@Override
public String toString() {
return name;
}
};
}
看来这种方法使用的是Java语言的一种功能,它在C#中没有匹配(或者至少是我所知道的)。如果你能告诉我如何在C#中做同样的技巧,那就太棒了。
答案 0 :(得分:4)
在Java中称为匿名类。它实际上只是一个没有名称的类实现,它会覆盖ToString()
你 能够在C#中使用普通的命名类 - 唯一的问题是,DateTime是C#中的结构,所以你不能继承它。
C#确实有匿名类型,但与Java不同。在C#中,您可以使用匿名类型并指定其属性,但不能指定任何方法实现。因此,C#和Java中的匿名类型往往用于不同的事情。
以下是如何在C#中执行此操作的示例,但如上所述,您无法在C#中的DateTime(或其他struct
或密封类)上执行此操作。所以为了这个例子;我正在使用一个名为Token的虚构类,它有一个字符串属性“Value”:
private Token GetNamedToken(Token t, string name)
{
return new NamedToken {Value = t.Value, Name = name};
}
private class NamedToken : Token
{
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}