【发布时间】:2010-05-05 04:54:58
【问题描述】:
我有一个实现接口的类。界面是
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();
}
它工作正常。但是,当我在 Window 服务中编写相同的代码时
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”。存在显式转换(您是否缺少演员表?)
当我输入转换为接口类型时,它开始工作
objIRiskFactory = (IRiskFactory)new RiskFactoryService();
我的问题是为什么会这样?
【问题讨论】:
-
也许我忽略了一些东西,但您没有从创建 RiskFactoryService 中得到 StackOverflowException ......无参数构造函数递归调用自身
标签: c#