【发布时间】:2012-11-06 16:43:19
【问题描述】:
我一直在阅读一些关于 SOLID 原则和依赖倒置的文章。从我的角度来看,我必须使用接口与任何类进行对话。我的班级正在使用界面聊天。
第一个问题:
我正在使用一个抽象类,但对于我的代码的第二部分,我使用了一个接口。
用法1
namespace DependencyInjection
{
public interface IMessage
{
}
public abstract class Message
{
public abstract void Get();
public abstract void Send();
}
public class Sms : Message, IMessage
{
public override void Get()
{
Console.WriteLine("Message Get!");
}
public override void Send()
{
Console.WriteLine("Message Send!");
}
}
public class MessageManager
{
private IMessage _message;
public Sms Sms
{
get { return _message as Sms; }
set { _message = value; }
}
public MessageManager(IMessage message)
{
_message = message;
}
}
}
用法:
class Program
{
static void Main(string[] args)
{
MessageManager msg = new MessageManager(new Sms());
msg.Sms.Get();
msg.Sms.Send();
Console.Read();
}
}
用法2
namespace DependencyInjection
{
public interface IMessage
{
public void Get();
public void Send();
}
public class Sms : IMessage
{
public void IMessage.Get()
{
Console.WriteLine("Message Get!");
}
public void IMessage.Send()
{
Console.WriteLine("Message Send!");
}
}
public class MessageManager
{
private IMessage _message;
public Sms Sms
{
get { return _message as Sms; }
set { _message = value; }
}
public MessageManager(IMessage message)
{
_message = message;
}
}
}
Usage1 和Usage2 有什么区别?什么时候选择 usage1 或 Usage2?
【问题讨论】:
-
因此,如果该示例具有要继承的抽象类
Message上的属性,例如int ID和string Sender,那么最干净的方法是让Message : IMessage继承方法,然后注入一个 Message 对象:public MessageManager(Message message)?只是想知道由于某种原因这是否是不好的做法,因为我不经常看到带有类的 DI。
标签: c# .net oop design-patterns