I’m sure I’ve seen somewhere that I can do the following by using an attribute above my Init() method, that tells the compiler that the Init() method must only be called from the constructor, thus allowing the readonly field to be set. I forgot what the attribute is called though, and I can’t seem to find it on google.
public class Class
{
private readonly int readonlyField;
public Class()
{
Init();
}
// Attribute here that tells the compiler that this method must be called only from a constructor
private void Init()
{
readonlyField = 1;
}
}
Rob’s answer is the way to do it, in my book. If you need to initialize multiple fields you can do it using
outparameters:Personally I find this makes sense in certain scenarios, such as when you want your fields to be
readonlybut you also want to be able to set them differently in a derived class (without having to chain a ton of parameters through someprotectedconstructor). But maybe that’s just me.