C# 派生类应始终为singleton
我试图创建一个基类,所有派生类之间共享一些功能。所有派生类都应该是单例。下面是一个伪示例C# 派生类应始终为singleton,c#,inheritance,singleton,C#,Inheritance,Singleton,我试图创建一个基类,所有派生类之间共享一些功能。所有派生类都应该是单例。下面是一个伪示例 class ExtensionSettings { public string GetConfigHtml() { // creat conifig html for all properties } public void SaveSettings() { // save stuff } } class SettingsA
class ExtensionSettings
{
public string GetConfigHtml()
{
// creat conifig html for all properties
}
public void SaveSettings()
{
// save stuff
}
}
class SettingsA : ExtensionSettings
{
private static SettingsA instance;
public static SettingsA Instance {get {return instance ?? (instance = new SettingsA());}}
public string setting1{get;set;}
public string setting2{get;set;}
}
class SettingsB : ExtensionSettings
{
private static SettingsB instance;
public static SettingsB Instance {get {return instance ?? (instance = new SettingsB());}}
public string setting1{get;set;}
public string setting2{get;set;}
}
static void Main(string[] args)
{
System.Console.WriteLine(SettingsA.Instance.setting1);
System.Console.WriteLine(SettingsB.Instance.setting2);
}
是否可以将实例化部分移动到ExtensionSettings基类?基类不知道要实例化的对象的其余部分。 基本上,当您从基类派生时,会在派生类中添加额外的逻辑 对基类隐藏。因此,在基类中进行实例化并不重要
有可能。不,这样做没有意义。你想完成什么?为什么派生类必须是单实例?单实例不能从多个线程安全使用。与编写仅使用新实例初始化字段的多线程安全工作的解决方案相比,执行您正在做的工作(效率更低)。它的代码太少了,我不明白为什么要尝试在基类中实现它,即使可以。这是一个单一的,非常简短和简单。要编写的代码行。@AlexM我正在尝试创建一种轻松构建html设置的方法。ExtensionSettings基类中的GetConfigHtml()函数使用反射来循环类的属性并构建适当的HTML。这就是为什么我有一个派生类的实例。但我不想每次需要访问属性时都创建SettingsA的新实例。这就是为什么我将其设置为单例。@PatrickNijhuis,为什么不使用构造函数创建基类,该构造函数将调用类作为参数和/或调用类对象实例。然后可以在基类中循环子类的属性以获取值。我不知道我是否理解正确。