根据 MSDN ,建议在需要简单组合时使用委托(delegate)。 谁能举例说明什么是Easy Composition?
最佳答案
一个例子会有所帮助。
假设您有一个需要输出一些日志消息的类,并且您想使用构造函数依赖注入(inject)为该类提供一种记录消息的方法。
您有多种选择,包括:
- 向类构造函数传递一个接口(interface),其中包含用于记录消息的方法。
- 将直接记录消息的委托(delegate)传递给类构造函数。
界面可能看起来像这样:
public interface Log
{
void WriteLine(string message);
// ... Other methods
}
因此类可能看起来像这样:
public sealed class MyClass
{
readonly ILog _log;
public MyClass(ILog log)
{
_log = log;
}
public void Test()
{
_log.WriteLine("Test() called");
}
}
这个类现在耦合到 ILog
接口(interface),在构造它时,您必须提供一个实现 ILog
的对象。
如果您改用委托(delegate),类可能如下所示:
public sealed class MyClass
{
readonly Action<string> _writeLogLine;
public MyClass(Action<string> writeLogLine)
{
_writeLogLine = writeLogLine;
}
public void Test()
{
_writeLogLine("Test() called");
}
}
现在该类不再耦合到ILog
,在构造它时您可以将任何与委托(delegate)匹配的方法传递给它:
var myClass = new MyClass(Console.WriteLine);
这使得 MyClass
的组合更容易 - 因此 Easy composition。
关于c# - C#中的简单组合是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41544382/