Ho trovato un argomento su MSDN che parla di sì, questo è possibile.È possibile la proprietà auto-implementata di sola lettura?
ho fatto un test che sembra rompere questa dichiarazione:
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;
}
}
}
Dove sbaglio?
Penso che stiate testando il tipo sbagliato di sola lettura qui. Il tuo codice dice solo che non ti è permesso di impostare la proprietà Bar direttamente da qualsiasi luogo al di fuori della classe, né da sottoclassi (setter privato). I metodi della tua classe possono ancora cambiare la variabile se il setter è privato. – dbemerlin
ummm ... che dire 'public readonly string Bar;'? – peterchen
@dbemerlin: sto parlando di readonly nel senso della parola chiave. Non sui livelli di accesso. C'è un argomento appropriato su MSDN: http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx. Penso che ci sia solo un tipo di sola lettura in C#. Tutto il resto è solo tutto il resto, non di sola lettura in C# :) – abatishchev