C# 如何在C中重用singleton对象的代码#
我在为我的项目设计课程时遇到了麻烦。目前,我们开发了两个结构相同但内部存在一些差异的项目 在项目A中,我有一个类C# 如何在C中重用singleton对象的代码#,c#,inheritance,static,singleton,C#,Inheritance,Static,Singleton,我在为我的项目设计课程时遇到了麻烦。目前,我们开发了两个结构相同但内部存在一些差异的项目 在项目A中,我有一个类ACore,其中包括类A配置,AEquipmentManager。我制作了一个对象ACore的实例,在项目的任何地方,我都可以使用:ACore.AConfiguration.XYZ(XYZ是AConfiguration类的方法或属性)或ACore.AEquipmentmanager.ABC(ABC是AEquipmentmanager类的方法或属性) 在项目B中,我仍然拥有与项目A相同的
ACore
,其中包括类A配置,AEquipmentManager
。我制作了一个对象ACore
的实例,在项目的任何地方,我都可以使用:ACore.AConfiguration.XYZ
(XYZ是AConfiguration
类的方法或属性)或ACore.AEquipmentmanager.ABC
(ABC是AEquipmentmanager
类的方法或属性)
在项目B中,我仍然拥有与项目A相同的结构(BCore、BConfiguration、BEquipmentManager
)。但是b配置
与a配置
不同(因为每个项目都有不同的配置),而BEquipmentManager
与AEquipmentManager
也有不同的配置
我想重用类ACore
和BCore
的代码,因为它们具有相同的代码(初始化设备管理器、初始化配置、处置设备管理器、处置配置…)。现在,我想编写一个库BaseCore
,它与ACore
和BCore
具有相同的结构(有两个类Configuration
,EquipmentManager
,相同的初始化函数,Dispose函数),并且具有特定的项目(如a项目、B项目,甚至以后的C、D项目)我可以使用BaseCore
库类(用于重用代码),只需实现XEquipmentManager
,xconfig
取决于每个项目
在这种情况下,我最好的设计方式是什么?谢谢分享你的想法
问候,,
和阮我认为你走对了方向 但我会使用接口:
- 实现使用实现IConfiguable的类的核心类
- 确保配置实现了IConfigurable和所有的
相关方法
- 实现使用配置类的核心类
- 实现从继承的配置/b配置
配置 - 将A和B引用到同一个核心类,就是这样
希望能有帮助。我认为你的思路是对的 但我会使用接口:
- 实现使用实现IConfiguable的类的核心类
- 确保配置实现了IConfigurable和所有的
相关方法
- 实现使用配置类的核心类
- 实现从继承的配置/b配置
配置 - 将A和B引用到同一个核心类,就是这样
希望有帮助。A配置和B配置是否有相同的方法集,但实现方式不同,还是这些方法集也不同?如果方法集相同,则可以使用接口来实现。您可以为配置和设备管理员定义一个接口。然后,您只需使用这些接口进行BaseCore。然后,您可以在BaseCore的构造中提供类似这样的具体实现(不包括单例) 注意:您必须初始化配置和AEquipmentmanager的实例。在像这样建造基础核心之前
AConfiguration conf = new AConfiguration();
AEquipmentmanager eq = new AEquipmentmanager();
BaseCore base = new BaseCore(conf eq);
或者,您可以简单地创建一个BaseCore构造函数,该构造函数使用一些枚举来向您指示哪个实现,然后在BaseCore构造函数中初始化相应类的实例
或者,您可以通过使用通用参数实现BaseCore来实现它,并通过这些参数提供配置和equipmentmanager实现。您仍然可以使用相同的接口,但实现BaseCore时要限制泛型参数。BaseCore看起来像这样:
class BaseCore<Configuration_type,Equipmentmanager_type>
where Configuration_type : IConfiguration, new()
where Equipmentmanager_type : IEquipmentmanager, new()
{
public Configuration_type Configuration {get;};
public Equipmentmanager_type Equipmentmanager {get;};
BaseCore()
{
Configuration = new Configuration_type();
Equipmentmanager = new Equipmentmanager_type();
}
}
classbasecore
其中配置类型:IConfiguration,new()
其中设备管理器类型:IEquipmentmanager,新()
{
公共配置_类型配置{get;};
公共设备管理器\类型设备管理器{get;};
BaseCore()
{
配置=新配置类型();
Equipmentmanager=新的Equipmentmanager_type();
}
}
但是,这会对需要无参数构造函数的类型施加约束。不过,应该可以在之后进行初始化
如果您想为特定配置专门化您的核心,您可以像这样从它继承
class Acore<Configuration_type,Equipmentmanager_type> :
BaseCore<Configuration_type,Equipmentmanager_type>
where Configuration_type : AConfiguration ,new()
where Equipmentmanager_type : AEquipmentmanager, new()
{
Acore() : base()
{
Configuration.intprop = 10;
}
}
class Acore:
岩芯
其中配置类型:A配置,新()
其中设备管理器类型:AEquipmentmanager,新()
{
Acore():base()
{
Configuration.intprop=10;
}
}
注意,我在a配置上添加了一个属性,该属性在BaseCore中不可访问,但在ACore中可访问。a配置和B配置是否具有相同的方法集,并且具有不同的实现,或者这些方法集是否也不同?如果方法集相同,则可以使用接口来实现。您可以为配置和设备管理员定义一个接口。然后,您只需使用这些接口进行BaseCore。然后,您可以在BaseCore的构造中提供类似这样的具体实现(不包括单例) 注意:您必须初始化配置和AEquipmentmanager的实例。在像这样建造基础核心之前
AConfiguration conf = new AConfiguration();
AEquipmentmanager eq = new AEquipmentmanager();
BaseCore base = new BaseCore(conf eq);
或者,您可以简单地创建一个BaseCore构造函数,该构造函数使用一些枚举来向您指示哪个实现,然后在BaseCore构造函数中初始化相应类的实例
或者,您可以通过实现BaseCore w来实现它