Как я могу отметить определенный параметр как устаревший/устаревший в С#?

Я хотел бы иметь возможность поддерживать С# API так же, как и сейчас, но просто игнорировать один из параметров в вызове метода. Возможно ли это, или мне нужно создать новый метод без параметра и пометить его как устаревший?

Ответы

Ответ 1

Короткий ответ:

Вам нужно будет создать новый метод с новой подписью и пометить текущий как устаревший.

Более длинный ответ

То, что вы хотите избежать любой ценой, - это перерыв кода! Затем, особенно в корпоративной структуре, вы хотите рекламировать, что ваш метод больше не поддерживается, например, но вы не хотите нести ответственность за зависящие решения от сбоев из-за решения архитектуры или дизайна или вашей стороны, не так ли?

Класс ObsoleteAttribute сделает трюк для вас.

Как только член класса будет отмечен как устаревший, на стороне клиента будут подняты предупреждения, те, кто использует вашу инфраструктуру, чтобы продолжить этот путь или даже один из ваших коллег по тому же проекту.

public class MyClass {
    [Obsolete("This method should no longer be used, please use MyNewMethod() instead.")]
    public void MyMethod(string name, long phoneNumber, long faxNumber) { 
    }

    public void MyNewMethod(string name, long phoneNumber, long faxNumber, string email) { 
    }
}

Это позволит рекламировать, что MyMethod больше не поддерживается на всех ваших пользователях кода.

Через определенный промежуток времени, достаточно разумный, чтобы каждый мог изменить свой код, вы можете сообщить этому атрибуту сообщение об ошибке, когда ваш устаревший метод все еще используется в коде.

public class MyClass {
    [Obsolete("This method should no longer be used, please use MyNewMethod() instead.", true)]
    public void MyMethod(string name, long phoneNumber, long faxNumber) { 
    }

    public void MyNewMethod(string name, long phoneNumber, long faxNumber, string email) { 
    }
}

Установив второй конструктор класса ObsoleteAttribute на true, вы можете компилировать рекламу использования этого метода в качестве ошибки.

Через некоторое время вы можете полностью удалить свой метод из своего кода, чтобы немного почистить его. Это часть методов рефакторинга, поощряемых методологией Agile Software Development.

Помогает ли это?

Ответ 2

Да, я думаю, что единственный способ - создать новый метод без параметра и пометить его с помощью ObsoleteAttribute.

Ответ 3

С атрибутом Obsolete:

[Obsolete("Please use void AnotherMethod() instead", false)]
void SomeMethod(Int32 data){
}

Логическое значение в атрибуте сообщает компилятору сгенерировать предупреждение, если вы измените его на true, компилятор сгенерирует ошибку. См. здесь для документации по нему.

Ответ 4

Да. Вы можете отмечать типы и типы типов как устаревшие, а не отдельные параметры. Однако вы можете перегрузить метод, тем самым сохраняя одно и то же имя и отмечая, что старый является устаревшим:

class Act
{
    [Obsolete("DoSomething(int, int) is obsolete", false /*warn only*/)]
    public void DoSomething(int i, int j)
    {
    }

    public void DoSomething(int i)
    {
    }
}

Ответ 5

Я думаю, что было бы лучше создать новый метод.

Что значит, устаревший параметр? От этого зависит конкретное значение этого аргумента? Когда вы вызываете метод, вам всегда нужно указывать аргумент.