Don't let them initialize by themselves. Make your base class constructor to take the collection as an argument:
public class BaseClass
{
protected readonly Collection someObject;
public BaseClass(Collection object)
{
someObject = object
}
}
So now when the derived class constructor is called it should call base class constructor also with the collection object otherwise it will be a compile time error. This will make sure that the collection is initialized in the constructor and no where else.
public class Derivedclass : BaseClass
{
public DerivedClass() : base(/*pass the collection object here*/)
{
}
}
Still there is a pit fall in this, if you get the reference of a collection, you can still modify the collection by calling Add or remove method of the collection in the derived class only thing is you cant reinitialize if its readonly.