Considere este escenario:¿Cómo y por qué se desaconseja ObsoleteAttribued para los descriptores de acceso a propiedades?
public class C
{
private int _foo;
public int Foo
{
get { return _foo; }
[Obsolete("Modifying Foo through the setter may corrupt hash tables. "
+ "Consider using the method 'ModifyFoo' instead.")]
set { _foo = value; }
}
public C ModifyFoo(int foo)
{
// return a new instance of C
}
}
cual no quiere compilar: CS1667
error: Atributo 'obsoleto' no es válido en la propiedad o descriptores de acceso de eventos. Solo es válido en las declaraciones 'class, struct, enum, constructor, method, property, indexer, field, event, interface, delegate'.
atributos específicamente que se aplican a los descriptores de acceso es perfectamente bien para cualquier otro atributo (siempre que AttributeTargets.Method
está configurado en sus usos, lo cual es cierto para ObsoleteAttribute
).
Me pregunto si los compiladores para otros lenguajes .NET lo permiten, y qué pasaría si su código C# hace referencia a un ensamblado donde se configuró. – Tinister
Interesante comentario. Intenté con VB.NET que permite '' en un setter. Resultado inesperado: el getter se vuelve obsoleto también. Ahora grazna como una restricción de compilación. –
Además, C# los tratará como advertencias y no como errores, incluso si el atributo en VB.NET está establecido en IsError = true, lo que le permite seguir creando código nuevo utilizando el setter marcado ObsoleteAttribute – Seph