Я добавляю новый универсальный метод Serialize для моего класса Serializer. И старый должен быть устаревшим.ObsoleteAttribute и общие методы
[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 (а) называет общую версию? Есть ли ошибка для общих устаревших методов?
Эти типы [выведены во время компиляции] (http://stackoverflow.com/a/4976972/11683). – GSerg
Правила разрешения перегрузки могут быть немного непрозрачными. Но это ясно, это действительно способствует * точному * совпадению с типом аргумента над преобразованием в Object. –
:/Кажется, нам нужно изменить имя метода .. Или переместить его в другое пространство имен. –