Возможны ли инициализаторы классов в C#?

В C# у вас есть инициализаторы объектов для инициализации полей объектов во время создания без использования конструктора.

Теперь мне интересно, существует ли эквивалент классов, что означает, что вы можете "инициализировать" свойства классов при определении подклассов, фактически не используя синтаксис переопределения, а просто объявляя значение известного свойства.

Пример:

public abstract class Car {
    public abstract string Name { get; }
}
// usual approach
public class Mustang : Car {
    public overwrite string Name { get { return "Ford Mustang"; } }
}
// my idea of avoiding boilerplate code
public class Mustang : Car { Name = "Ford Mustang" }

Есть ли способ сделать это? Могут ли шаблоны T4 помочь, если их нет?

2 ответа

Решение

Чтобы сделать пример rekire более понятным, вы должны написать что-то вроде:

public abstract class Car
{
    public string Name { get; private set; }

    protected Car(string name)
    {
        this.Name = name;
    }
}

public class Mustang : Car
{
    public Mustang() : base("Mustang")
    {
    }
}

РЕДАКТИРОВАТЬ: Другой вариант заключается в использовании атрибутов, где вы должны написать:

[CarName("Mustang")]
public class Mustang : Car

... написав соответствующий код отражения в Car, Я настоятельно рекомендую, чтобы вы этого не сделали. Конечно, атрибуты могут быть полезны в вашем реальном контексте.

Вы можете сделать это через construtor, где вам нужно вызвать конструктор базового класса.

class car {
    Public string Name {public get; protected set}
}

Это должно в принципе работать тоже.

Другие вопросы по тегам