Znalazłem temat na MSDN, który mówi, że tak, to jest możliwe.Czy jest możliwa automatyczna implementacja tylko do odczytu?
Zrobiłem test, który wydaje się przerwać to oświadczenie:
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;
}
}
}
Jeżeli się mylę?
Myślę, że testujesz na niewłaściwy rodzaj tylko do odczytu tutaj. Twój kod mówi tylko, że nie możesz ustawić paska właściwości bezpośrednio z dowolnego miejsca spoza klasy ani z podklas (prywatnego ustawiacza). Twoje metody klas mogą nadal zmieniać zmienną, jeśli seter jest prywatny. – dbemerlin
ummm ... a co z 'public readonly string Bar;'? – peterchen
@dbemerlin: Mówię tylko w znaczeniu słowa kluczowego. Nie o poziomach dostępu. W witrynie MSDN znajduje się odpowiedni temat: http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx. Myślę, że istnieje tylko jeden rodzaj tylko do odczytu w języku C#. Cała reszta to po prostu wszystko inne, nie tylko do odczytu w języku C# :) – abatishchev