You misuse some OOD principles in your code. For example, you mix in your classes static behavior (witch is something like Singleton design pattern) and polymorphism (you use abstract base class but without any base class interface). And because we have no such thing like "Static Polymorphism" we should separate this two roles.
If you describe in more details what problem are you trying to solve, maybe you receive more accurate answers.
But anyway you may implement something like this:
public class Cc : Ca
{
private Cc()
: base("Test")
{
//We may call protected setter here
}
private static Ca instance = new Cc();
public static Ca Instance
{
get { return instance; }
}
}
public abstract class Ca
{
protected Ca(string p1)
{
P1 = p1;
}
//You may use protected setter and call this setter in descendant constructor
public string P1
{
get;
private set;
}
}
static void Main(string[] args)
{
string s = Cc.Instance.P1; // is not null
}