Вы злоупотребить некоторые принципы OOD в вашем коде. Например, вы смешиваете в своих классах статическое поведение (ведь это что-то вроде шаблона проектирования Singleton) и полиморфизм (вы используете абстрактный базовый класс, но без какого-либо интерфейса базового класса). И поскольку у нас нет такой вещи, как «Статический полиморфизм», мы должны отделить эти две роли.
Если вы описали более подробную информацию о том, какую проблему вы пытаетесь решить, возможно, вы получите более точные ответы.
Но в любом случае вы можете реализовать что-то вроде этого:
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
}
На боковой ноте, поэтому ReSharper будет кричать на вас, если вы пытаетесь сделать что-то подобное (см статическое поле через Выводя класс). – 2010-09-30 09:58:14
Я прочитал этот вопрос: http://stackoverflow.com/questions/774181/why-cant-i-inherit-static-classes, вы знаете, как я мог это сделать? статические свойства не поддерживаются в интерфейсах – fravelgue
@fravelgue, как вы могли что-то сделать? Вы не объяснили, что вы пытаетесь сделать точно ... –