Me gustaría poder mantener una API C# igual que ahora, pero simplemente desaprobar uno de los parámetros en una llamada a método. ¿Es posible hacerlo, o necesito crear un nuevo método sin el parámetro y marcar el original como Obsoleto?¿Cómo puedo marcar un parámetro específico como obsoleto/obsoleto en C#?
Respuesta
Respuesta corta:
Usted tendrá que crear una nueva nethod con la nueva firma, y marcar la corriente obsoleta.
Respuesta larga
Lo que se quiere evitar a toda costa es un salto de código! Entonces, particularmente en el marco de una empresa, desea anunciar que su método ya no será compatible, por ejemplo, pero no desea ser responsable de que las soluciones se bloqueen debido a una decisión de arquitectura o diseño, o por su parte, ¿no?
La clase ObsoleteAttribute
hará el truco para usted.
Una vez que un miembro de la clase marcado como obsoleto, una advertencia se planteará en el lado del cliente, los que utilizan su marco, para continuar de esa manera, o incluso uno de su colega en el mismo proyecto.
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) {
}
}
Esto anunciar que MyMethod
ya no está soportado a lo largo de sus usuarios de código.
Después de un cierto período de tiempo, lo suficientemente razonable como para permitirle a todo el mundo cambiar su código, puede decirle a este atributo que envíe un mensaje de error cuando su método obsoleto aún se usa en el código.
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) {
}
}
Al establecer el segundo parámetro del constructor ObsoleteAttribute
clase para true
, que tel el compilador para anunciar el uso de este método como un error.
Después de un tiempo solamente, puede eliminar por completo su método de su código para limpiarlo un poco. Esto es parte de los métodos de refactorización fomentados por la metodología de desarrollo ágil de software.
¿Le sirve de ayuda?
Sí. Solo puede mark types and members of types as obsolete, no parámetros individuales. Se podría, sin embargo, la sobrecarga del método, manteniendo así el mismo nombre y marca la antigua como obsoleto:
class Act
{
[Obsolete("DoSomething(int, int) is obsolete", false /*warn only*/)]
public void DoSomething(int i, int j)
{
}
public void DoSomething(int i)
{
}
}
Creo que lo mejor sería crear un nuevo método.
¿Qué quiere decir con hacer el parámetro obsoleto? ¿Esto depende de un valor específico para ese argumento? Cuando llama a un método, siempre tiene que especificar el argumento de todos modos.
Sí, creo que la única forma es crear un nuevo método sin el parámetro y marcar el original con ObsoleteAttribute
.
+1 ¡Por supuesto! =) –
Con el atributo obsoleto:
[Obsolete("Please use void AnotherMethod() instead", false)]
void SomeMethod(Int32 data){
}
El booleana en el atributo le dice al compilador que genere una advertencia, si cambia a true el compilador generará un error. Ver here para la documentación en él.
+1 ¡Esa es la mejor manera de hacerlo! =) –
¿Es posible hacer esto sin marcar todo el método como obsoleto? – Brian
No, como dicen las otras respuestas (como Chris Wallis), el parámetro no es un objetivo para ObsoleteAttribute. –
- 1. Cómo marcar un parámetro de interruptor como obligatorio en Powershell
- 2. Parámetro de clase específico en Objective-C
- 3. ¿Cómo marcar un conjunto .net como seguro?
- 4. Pasando el parámetro como final en C#
- 5. ¿Cómo puedo marcar una propiedad como obsoleta en Delphi?
- 6. ¿Puedo pasar delegado como un parámetro objetivo-c
- 7. C++ 0x lambda, ¿cómo puedo pasar como parámetro?
- 8. Marcar los parámetros como NOT anulables en C# /. NET?
- 9. En VB.NET, ¿puedo marcar una función como obsoleta?
- 10. ¿Puedo marcar un control remoto GIT como de solo lectura?
- 11. ¿Puedo usar enum como un parámetro convertidor?
- 12. ¿Cómo puedo marcar el código de Perl como obsoleto?
- 13. En C, ¿cómo puedo obtener un directorio específico?
- 14. android: ¿cómo puedo marcar mi aplicación como depurable?
- 15. C++ pasar enumeración como parámetro
- 16. ¿Cómo puedo configurar un parámetro para DateTime.MaxValue en C#?
- 17. ¿Puedo marcar una función como obsoleta en Scala?
- 18. ¿Puedo marcar un método de controlador como POST en Play usando anotaciones?
- 19. ¿Cómo marcar una clase como Deprecated?
- 20. C++ utilizando 'esto' como parámetro
- 21. Marcar como obsoleto
- 22. Android: cómo marcar sms como leído enRecibir
- 23. Verificación de un parámetro específico con Moq
- 24. Marcar datos como sensibles en python
- 25. C++ Pasando ostream como parámetro
- 26. ¿Cómo declarar o marcar un método Java como obsoleto?
- 27. Hg: Cómo marcar un conjunto de cambios como 'estable'
- 28. C# SQL Arriba como parámetro
- 29. Pasar una matriz como un parámetro de función en C++
- 30. ¿Cómo marcar algo en Qt como obsoleto (obsoleto)?
+1 para una respuesta más competitiva y deletreando los pasos. Más informativo que la respuesta de Steves – Gorgen