C# 使用没有抽象的基本方法

C# 使用没有抽象的基本方法,c#,software-design,C#,Software Design,下面的代码可以吗?我在问自己,接口ICustomTimer中的Start和Stop方法是否适合作为位置。因为我在我的主要方法中需要它 这是一种代码气味,或者换句话说,调用没有抽象的基本方法的最佳实践是什么?Timer类没有可用于继承的接口 public interface ICustomTimer { string Value { get; set; } //Implementation in Timer void Start(); //Implementat

下面的代码可以吗?我在问自己,接口ICustomTimer中的Start和Stop方法是否适合作为位置。因为我在我的主要方法中需要它

这是一种代码气味,或者换句话说,调用没有抽象的基本方法的最佳实践是什么?Timer类没有可用于继承的接口

public interface ICustomTimer
{
    string Value { get; set; }

    //Implementation in Timer
    void Start();

    //Implementation in Timer
    void Stop();
}

public class CustomTimer : System.Timers.Timer, ICustomTimer
{
    public string Value { get; set; }
}

public Main()
{
    var customTimerObj = iocContainer.Get<ICustomTimer>();
    customTimerObj.Start();
}

这是一个有效的用途,甚至是一个很好的用途,如果您使用接口时只需要调用class方法,否则您可以这样做:

public interface ICustomTimer
{
    string Value { get; set; }

    //Implementation in Timer
    void Start();

    //Implementation in Timer
    void Stop();
}

public class CustomTimer : System.Timers.Timer, ICustomTimer
{
    public string Value { get; set; }
    void ICustomTimer.Start() { this.Start(); }
    void ICustomTimer.Stop() { this.Stop(); }
}

通过这种方式,您可以在对Timer类的方法调用之前或之后执行其他操作。我看到的唯一问题是,您没有任何更大的继承可能性,这就是为什么我们要这样做。除此之外,它还可以,但这是基于意见的,因此可能会被关闭。这确实会让您对System.Timers.Timer的实现有一点束缚。假设MS的某个人有一个大脑屁,并将该方法更改为StartTimer,那么您的代码将中断,您将被迫实现Start方法。此外,您还可能有人试图直接访问计时器方法。我更喜欢把计时器包装在里面,这样它就完全封装好了。但正如@HimBromBeere所说,这都是观点……“好”有点主观,但它是有效的。请注意,当您使用另一个计时器类时,您必须映射它们的启动和停止等价物。@DavidG-这个brainfart已经发生了,多个计时器。那么为什么它是一个好的用途呢?这个问题是基于意见的,我想这个答案也是很好的,因为它很简单,符合目的,并且符合MSDN文档中描述的接口使用,我还提出了一个替代方案,为了弄清楚它会做什么,并且只有当你想在方法调用之前和之后添加步骤时才有用,比如说,首先引发事件。另外,为了在你的其他评论中掩盖你的担忧,DavigG让我们假设MS的某个人有个大脑放屁,并将方法更改为StartTimer,这不会发生,因为他的项目将在编译时绑定到.net framework的一个版本——微软的任何更改都将在.net的新版本中进行,而不会更改他在开发过程中绑定的版本。