我有一个名为ConsoleTheme
的抽象类,它是控制台主题(如Dark和Light主题)的基类。
public abstract class ConsoleTheme
{
public abstract ConsoleColor BackgroundColor { get; }
}
我希望在常量类中有一个常量值,因此可以选择任何可以从类ConsoleTheme
继承的类。
public class LightTheme : ConsoleTheme
{
public override ConsoleColor BackgroundColor
{
get
{
return ConsoleColor.Black;
}
}
}
然而,它说这些类像变量一样使用,但它们是一种类型。我怎样才能做到这一点?
例如:
public const ConsoleTheme = LightTheme;
答案 0 :(得分:2)
public abstract class ConsoleTheme
{
public abstract ConsoleColor BackgroundColor { get; }
}
public class LightTheme : ConsoleTheme
{
public override ConsoleColor BackgroundColor
{
get
{
return ConsoleColor.Black;
}
}
}
用法:
public ConsoleTheme ct = new LightTheme();
我不确定你为什么要让它成为常数或静态。相反,您可以在启动时实例化正确的IConsoleThemePicker,并将此实例传递给任何需要它的类(手动或使用依赖注入)。这使它变得灵活且可测试。
public interface IConsoleThemePicker
{
ConsoleTheme GetCurrentConsoleTheme();
}
public class DefaultConsoleThemePicker : IConsoleThemePicker
{
public ConsoleTheme GetCurrentConsoleTheme();
}
用法:
public class SomeClass
{
private readonly IConsoleThemePicker _consoleThemePicker;
public SomeClass(IConsoleThemePicker consoleThemePicker)
{
_consoleThemePicker = consoleThemePicker;
}
public void SomeMethod()
{
var theme = _consoleThemePicker.GetCurrentConsoleTheme();
// use theme
}
}
答案 1 :(得分:1)
除了已经说过的内容之外,您可能希望有一种简单的方法来选择主题,例如您使用颜色或画笔(即Brushes.Red
)。
您可以这样做:
static class ConsoleThemes
{
public static readonly ConsoleTheme Light = new LightTheme();
public static readonly ConsoleTheme Dark = new DarkTheme();
}
那么你可以说:
var theme = ConsoleThemes.Light;
答案 2 :(得分:0)
我认为您需要创建LightTheme
类的实例,因为它不是静态的。
答案 3 :(得分:0)
无法将类实例分配到const
字段。您必须创建一个实例并将其分配给static readonly
字段。
public static readonly ConsoleTheme ConsoleTheme = new LightTheme();
虽然拥有只读主题听起来不错:)
答案 4 :(得分:0)
因为它是一个类,所以你需要创建该类的一个对象才能使用它。
使用new
关键字创建对象,如此。
public const ConsoleTheme theme = new LightTheme();