0

Serializer クラスに新しいジェネリック Serialize メソッドを追加しています。そして、古いものは時代遅れでなければなりません。

[XmlRoot("a")]
public class A
{
    [XmlElement("field")]
    public string Field;
}

class Program
{
    static void Main(string[] args)
    {
        A a = new A();
        a.Field = "filed value";

        Console.WriteLine(Serialize(a));//this calls generic version !?
        Console.WriteLine();
        Console.WriteLine(Serialize(null));//ok
        Console.WriteLine();
        Console.WriteLine(Serialize<A>(a));//ok, we explicitly called generic version
    }

    [Obsolete("Use Serialize<T> instead")]
    public static string Serialize(Object pObject)
    {
        return "You have called old Serialize method";
    }

    public static string Serialize<T>(T value)
    {
        return "You have called new Serialize<T> method";
    }
}

期待される結果は次のとおりです。

You have called old Serialize method

You have called old Serialize method

You have called new Serialize<T> method

しかし、結果は次のとおりです。

You have called new Serialize<T> method

You have called old Serialize method

You have called new Serialize<T> method

では、なぜ Serialize(a) が汎用バージョンを呼び出すのでしょうか? 廃止された一般的なメソッドにバグはありますか?

4

1 に答える 1

1

キャストaするobjectと、期待される結果が得られます

Console.WriteLine(Serialize((object)a))
于 2014-01-26T17:06:05.657 に答える