Tuve el mismo problema hoy y tuve una solución que funcionaba para objetos de datos simples que no tienen lógica propia. En lugar de hacer que el setter sea obsoleto (lo cual no funciona por las razones mencionadas en otra respuesta), hice el constructor mismo obsoleto e introduje uno nuevo donde proporciono el valor inicial. Esto supone que el constructor predeterminado se ejecutó para crear la instancia de la clase. Tal vez tendrías que marcar a otro.
Sin embargo, no puede utilizar las propiedades de auto-aplicado en este caso con el fin de ser capaz de establecer el valor inicial dentro del constructor:
class MyClass
{
[Obsolete("Use the constructor with param myProperty instead")] MyClass() { }
MyClass(MyProperty m) { this.m_MyProperty = m; }
public MyType MyProperty
{
get { return this.m_MyProperty; }
set { this.m_MyProperty = value; }
}
}
Así que, de hecho, he creado un solo lectura-propiedad cuyo valor puede solo ser establecido por el constructor. De cualquier intento de crear una instancia por su default-constructor y para establecer su propiedad no producirá el compilador de alerta para el organismo pero para la creación de instancias - que está bien en mi caso:
var m = new MyClass(); // here we get warning/error now
m.MyProperty =
Tenga en cuenta que este doesn el 't trabajo si su ment NO ES propiedad para ajustar desde el exterior en absoluto. Esto es cuando su valor se calcula en el nuevo código:
MyProperty { get { return /* some computation */ } }
Puesto que usted ha establecido que para elevar errores, ¿por qué no eliminar la incubadora, van a ser notificada se lee solamente. – Doggett
Todavía se puede desactivar el error utilizando la directiva #pragma warning' ', a pesar de que no es sólo una advertencia. De esta forma, el código heredado seguirá generando, mientras que el código futuro no se generará. –