Encontré un tema en MSDN que dice que sí, esto es posible.¿Es posible la propiedad de solo lectura y auto implementada?
Me hicieron una prueba que parece romper esta declaración:
using System;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Foo f = new Foo("1");
Console.WriteLine(f.Bar); // prints 1
f.Test("2");
Console.WriteLine(f.Bar);// successfully prints 2
}
}
class Foo
{
public Foo(string b)
{
this.Bar = b;
}
public string Bar { get; private set; }
public void Test(string b)
{
// this would be impossible for readonly field!
// next error would be occur: CS0191 or CS0191
// A readonly field cannot be assigned to (except in a constructor or a variable initializer)
this.Bar = b;
}
}
}
¿Dónde estoy mal?
Creo que está probando el tipo incorrecto de solo lectura aquí. Su código solo dice que no tiene permitido establecer la barra de propiedades directamente desde ningún lugar fuera de la clase ni desde las subclases (instalador privado). Sus métodos de clase aún pueden cambiar la variable si el setter es privado. – dbemerlin
ummm ... ¿qué pasa con 'public readonly string Bar;'? – peterchen
@dbemerlin: estoy hablando solo de sentido de la palabra clave. No sobre los niveles de acceso. Hay un tema apropiado en MSDN: http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx. Creo que solo hay un tipo de solo lectura en C#. Todo lo demás es todo lo demás, no solo de lectura en C# :) – abatishchev