【问题标题】:How to set a default value of a property on every object that implements an interface?如何在每个实现接口的对象上设置属性的默认值?
【发布时间】:2011-11-30 19:30:07
【问题描述】:

我的 IVehicle 界面上有一个名为 Color 的属性。如果我希望实现该接口的每辆车都具有“红色”的默认颜色,我该如何实现呢?我这里需要另一个级别吗?

public interface IVehicle
{
    string Color { get; set; }

    void Go();        
    void Stop();
}

public class Bmw : IVehicle
{

    #region IVehicle Members

    public string Color
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }

    public void Go()
    {

    }

    public void Stop()
    {

    }

    #endregion
}

【问题讨论】:

  • 我认为你应该看一个抽象类,它更适合这些类型的东西。

标签: c# oop interface


【解决方案1】:

如果我希望从该接口继承的每辆车都具有“红色”的默认颜色,我该如何实现?

这实际上是一个实现细节,所以它不是接口的一部分。接口不能规定类如何实现它 - 只有必须实现哪些成员。

如果您想要这种类型的控件,您可能需要使用abstract class 而不是接口。 Vehicle 基类可以使用 Colors.Red 设置默认实现。

【讨论】:

    【解决方案2】:

    您不是从接口“继承”,而是“实现”它。默认颜色将是实现的一部分。所以是的,你需要“另一个层次”它可能是你的子类继承的抽象类或具体类。

    注意:您可以实现许多接口,但只能从一个类继承。

    【讨论】:

    • 已修复,谢谢。我总是把这个措辞弄混。在某些时候它会粘住。
    【解决方案3】:

    如果您在抽象类上使用接口没有特定原因(例如实现它的东西已经有一个基类),那么抽象类就是要走的路。您还需要确保将属性声明为虚拟,否则将无法被继承类覆盖。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-15
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      相关资源
      最近更新 更多