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

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

5 ответов


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

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

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

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

на 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, вы тел компилятор, чтобы объявить использование этого метода в качестве ошибки.

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

это поможет?


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


с устаревшим атрибутом:

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

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


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

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

    public void DoSomething(int i)
    {
    }
}

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

Что вы имеете в виду, делая параметр устарел? Зависит ли это от конкретного значения для этого аргумента? Когда вы вызываете метод, вы всегда должны указать аргумент в любом случае.