我一直在尝试学习依赖注入,但在运行代码时遇到2个错误:
DependencyInjection.Message.Sms()
必须声明一个正文,因为它没有标记为abstract,extern或partial。DependencyInjection.IInterface
类型转换为DependencyInjection.MyClass
。存在显式转换(您是否错过了演员?)下面的代码是否适合DI?
namespace DependencyInjection
{
public interface IInterface
{
}
public abstract class Message
{
public virtual void Sms();
}
public class MyClass : Message, IInterface
{
public override void Sms()
{
Console.WriteLine("Sms gönder.");
}
}
public class ClassManager
{
private IInterface _myinterface;
public MyClass Xyz
{
get { return _myinterface; }
set { _myinterface = value; }
}
public ClassManager(IInterface myinterface)
{
_myinterface = myinterface;
}
}
}
答案 0 :(得分:4)
1)DependencyInjection.Message.Sms()'必须声明一个正文,因为它没有标记为abstract,extern或partial
将abstract
关键字(并删除虚拟)添加到方法声明:
public abstract void Sms();
2)不能将类型'DependencyInjection.IInterface'隐式转换为'DependencyInjection.MyClass'。存在显式转换(您是否错过了演员?)
private IInterface _myinterface;
public MyClass Xyz
{
get { return _myinterface; }
set { _myinterface = value; }
}
Xyz
的返回类型为MyClass
,但在get
中,您将返回_myinterface
类型IInterface
。
更改为以下内容:
public IInterface Xyz
{
get { return _myinterface; }
set { _myinterface = value; }
}
答案 1 :(得分:0)
更改此
public abstract class Message
{
public virtual void Sms();
}
到这个
public abstract class Message
{
public abstract void Sms();
}
你要么给虚拟方法一个身体,就像这样
public virtual void Sms() { }
或者您将其标记为摘要
public abstract void Sms();
编辑:
忘了第二个错误。改变这个
public MyClass Xyz
{
get { return _myinterface; }
set { _myinterface = value; }
}
到这个
public IInterface Xyz
{
get { return _myinterface; }
set { _myinterface = value; }
}
答案 2 :(得分:0)
你宣布一个没有身体的虚拟方法。虚方法必须声明一个将作为方法的默认实现的主体。您可以将方法声明为abstract
,这意味着派生类必须提供自己的实现:
public abstract void Sms();
或者您可以将方法保持为虚拟并在基类中提供默认实现:
public virtual void Sms()
{
// Default or no implementation goes here.
}
在以下代码中,您尝试将IInterface
投射到MyClass
,这可能不是您想要的。
public MyClass Xyz
{
get { return _myinterface; }
set { _myinterface = value; }
}
您可能希望返回IInterface
:
public IInterface Xyz
{
get { return _myinterface; }
set { _myinterface = value; }
}