代码之家  ›  专栏  ›  技术社区  ›  azheglov

邪恶的JUnit约会把戏-你怎么能在C#里做到这一点?

  •  2
  • azheglov  · 技术社区  · 14 年前

    Here is the blog post describing the trick - it is not long .

    技巧的关键部分是这个方法(在Java中),它重写 关于 上课。

    private Date namedDate(final String name, final Date date) {
        return new Date(date.getTime()){
            @Override
            public String toString() {
                return name;
            }
        };
    }
    

    这个方法似乎使用了一种Java语言的工具,它在C#(或者至少我知道的一种)中没有匹配项。如果你能教我怎么用C#做同样的把戏,那就太棒了。

    1 回复  |  直到 14 年前
        1
  •  4
  •   driis    14 年前

    在Java中称为匿名类。它实际上只是一个没有名字的类实现,它重写了ToString()

    在C#中使用一个普通的、命名的类可以实现相同的功能—唯一的问题是,DateTime是C#中的一个结构,因此不能从它继承。

    C有匿名类型,但与Java不同。在C中,可以有一个匿名类型并指定其属性,但不能指定任何方法实现。因此,C#和Java中的匿名类型往往用于不同的用途。

    编辑

    下面是一个用C#编写的示例,但是如上所述,不能在DateTime(或其他 struct

    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;
        }
    }