C# 通过接口实例化类时无法理解C编译器的行为
我有一个实现接口的类。界面是C# 通过接口实例化类时无法理解C编译器的行为,c#,C#,我有一个实现接口的类。界面是 public interface IRiskFactory { void StartService(); void StopService(); } public class RiskFactoryService : IRiskFactory { } 实现接口的类是 public interface IRiskFactory { void StartService(); void StopService(); } public clas
public interface IRiskFactory
{
void StartService();
void StopService();
}
public class RiskFactoryService : IRiskFactory
{
}
实现接口的类是
public interface IRiskFactory
{
void StartService();
void StopService();
}
public class RiskFactoryService : IRiskFactory
{
}
现在我有了一个控制台应用程序和一个窗口服务
如果我编写以下代码,请从控制台应用程序
static void Main(string[] args)
{
IRiskFactory objIRiskFactory = new RiskFactoryService();
objIRiskFactory.StartService();
Console.ReadLine();
objIRiskFactory.StopService();
}
它工作得很好。但是,当我在WindowService中编写相同的代码时
public partial class RiskFactoryService : ServiceBase
{
IRiskFactory objIRiskFactory = null;
public RiskFactoryService()
{
InitializeComponent();
objIRiskFactory = new RiskFactoryService(); <- ERROR
}
/// <summary>
/// Starts the service
/// </summary>
/// <param name="args"></param>
protected override void OnStart(string[] args)
{
objIRiskFactory.StartService();
}
/// <summary>
/// Stops the service
/// </summary>
protected override void OnStop()
{
objIRiskFactory.StopService();
}
}
我的问题是为什么会这样?我认为问题在于,在本例中,RiskFactoryService指的是不实现IRiskFactory的部分类定义RiskFactoryService:ServiceBase,您的意思是该类与实现IRiskFactory的RiskFactoryService类相同吗?-如果是这样的话,那么类定义可能也应该标记为partial
我看到的一个更紧迫的问题是,您正在递归地调用RiskFactoryService类内部的构造函数。这意味着每次尝试实例化RiskFactoryService时,堆栈都会溢出。我认为问题在于,在这种情况下,RiskFactoryService是指不实现IRiskFactory的部分类定义RiskFactoryService:ServiceBase。您是指该类与RiskFactoryService类相同吗这是IRiskFactory吗如果是这样的话,那么类定义可能也应该标记为partial
我看到的一个更紧迫的问题是,您正在递归地调用RiskFactoryService类内部的构造函数。这意味着每次您尝试实例化RiskFactoryService时,堆栈都会溢出。您的windows服务类是否应该实际实现如下所示的服务
public partial class RiskFactoryService : ServiceBase , IRiskFactory
{
}
为什么要在RiskFactoryService的构造函数中创建RiskFactoryService,我认为这会导致堆栈溢出错误!!您只需调用此.StartService…您的windows服务类不应该实际实现如下所示的服务
public partial class RiskFactoryService : ServiceBase , IRiskFactory
{
}
为什么要在RiskFactoryService的构造函数中创建RiskFactoryService,我认为这会导致堆栈溢出错误!!您只需调用此.StartService…就会产生两种想法:
如果您使用partial将类型的服务/接口部分放在单独的文件中,因为代码提到partial并且似乎没有实现接口本身,那么名称空间是否正确?使用分部类很容易意外地创建两种类型而不是一种类型
IRiskFactory是否因具有引用的dll和本地副本而面临解决问题?i、 所有的代码都在谈论同一个工厂吗?
有两种想法:
如果您使用partial将类型的服务/接口部分放在单独的文件中,因为代码提到partial并且似乎没有实现接口本身,那么名称空间是否正确?使用分部类很容易意外地创建两种类型而不是一种类型
IRiskFactory是否因具有引用的dll和本地副本而面临解决问题?i、 所有的代码都在谈论同一个工厂吗?
也许我忽略了一些东西,但是你没有从RiskFactoryService的创建中获得StackOverflowException…无参数构造函数递归地调用自己也许我忽略了一些东西,但是你没有从RiskFactoryService的创建中获得StackOverflowException…无参数构造函数调用自己递归地