我有一个实现接口(interface)的类。界面是
public interface IRiskFactory
{
void StartService();
void StopService();
}
实现接口(interface)的类是
public class RiskFactoryService : IRiskFactory
{
}
现在我有一个控制台应用程序和一个窗口服务。
如果我编写以下代码,则从控制台应用程序
static void Main(string[] args)
{
IRiskFactory objIRiskFactory = new RiskFactoryService();
objIRiskFactory.StartService();
Console.ReadLine();
objIRiskFactory.StopService();
}
它工作正常。但是,当我在窗口服务中编写相同的代码时
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”。存在显式转换(是否缺少强制转换?)
当我输入转换为接口(interface)类型时,它开始工作
objIRiskFactory = (IRiskFactory)new RiskFactoryService();
我的问题是为什么会这样?
请您参考如下方法:
有两种想法:
- 如果您使用
partial将类型的服务/接口(interface)部分放在单独的文件中(因为代码提到了partial并且似乎没有实现接口(interface)本身)命名空间是否正确?对于partial类,很容易意外地最终创建两种类型而不是一种类型 IRiskFactory是否遇到解析问题(可能是因为有引用的 dll 和本地副本)?即所有代码都在谈论相同IRiskFactory吗?
