C#最佳实践:使用委托或接口作为类依赖项

Jos*_*ler 6 c# delegates interface

我有一个类需要一种方法来检索具有最大值的随机整数值.我不希望这个类依赖于检索该随机值的特定方法(例如system.random).最好是:

(A)使用公共代表(或func)

public delegate int NextRandomInt(int maxValue);

public class MyClass
{
    public NextRandomInt NextRandomInt { get; set; }

    public MyClass(NextRandomInt nextRandomInt)
    {
        NextRandomInt = nextRandomInt;
    }
}
Run Code Online (Sandbox Code Playgroud)

(B)使用公共界面

public interface IRandomIntProvider
{
    int NextInt(int maxValue);
}

public class MyClass
{
    public IRandomIntProvider RandomIntProvider { get; set; }

    public MyClass(IRandomIntProvider randomIntProvider)
    {
        RandomIntProvider = randomIntProvider;
    }
}
Run Code Online (Sandbox Code Playgroud)

(C)其他一切都在一起.

两种方式都有效.我觉得使用委托会更简单,更快速地实现,但界面更易读,并且在依赖注入时可能更容易.

use*_*216 0

以我的观点(我确信),带有界面的第二个选项是最好的。这种情况就是策略模式的典型例子。