Vous abusez des principes OOD dans votre code. Par exemple, vous mélangez dans vos classes un comportement statique (quelque chose comme Singleton Design Pattern) et un polymorphisme (vous utilisez une classe de base abstraite mais sans interface de classe de base). Et parce que nous n'avons rien de tel que le "polymorphisme statique", nous devrions séparer ces deux rôles.
Si vous décrivez plus en détail ce sont les problèmes que vous essayez de résoudre, peut-être vous recevoir des réponses plus précises.
Mais de toute façon, vous pouvez mettre en œuvre quelque chose comme ceci:
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
}
D'un côté note, c'est pourquoi ReSharper criera à vous si vous essayez de faire quelque chose comme ça (se référer à un champ statique par une dérivation classe). –
J'ai lu cette question: http://stackoverflow.com/questions/774181/why-cant-i-inherit-static-classes, savez-vous comment pourrais-je faire cela? propriétés statiques ne supportent pas dans les interfaces – fravelgue
@fravelgue, comment pourriez-vous faire quoi? Vous n'avez pas expliqué ce que vous essayiez de faire exactement ... –