Как установить значение по умолчанию свойства для каждого объекта, который реализует интерфейс? - PullRequest
2 голосов
/ 30 ноября 2011

У меня есть свойство Color в моем интерфейсе IVehicle.Если бы я хотел, чтобы все транспортные средства, которые реализуют этот интерфейс, имели цвет по умолчанию «Красный», как я мог бы добиться этого?Мне нужен еще один уровень здесь?

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
}

Ответы [ 3 ]

8 голосов
/ 30 ноября 2011

Если я хочу, чтобы все транспортные средства, которые наследуют от этого интерфейса, имели цвет по умолчанию «Красный», как я мог бы добиться этого?

Это действительно будет деталь реализации, поэтому она не является частью интерфейса. Интерфейс не может определять, как класс реализует его, - только то, какие члены должны быть реализованы.

Если вы хотите этот тип управления, вы можете использовать abstract class вместо интерфейса. Базовый класс Vehicle может установить реализацию по умолчанию, используя Colors.Red.

3 голосов
/ 30 ноября 2011

Вы не « наследуете » от интерфейса, вы « реализуете ».Цвет по умолчанию будет частью реализации.Поэтому да, вам нужен «другой уровень». Это может быть абстракционный или конкретный класс, от которого наследуются ваши дочерние классы.

Примечание.

0 голосов
/ 30 ноября 2011

Если нет конкретной причины, по которой вы используете интерфейс над абстрактным классом (например, вещи, реализующие его, уже имеющие базовый класс), тогда абстрактный класс - это путь. Также необходимо убедиться, что свойство объявлено как виртуальное, иначе оно не сможет быть переопределено наследующими классами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...