C#中是否可以使用类初始值设定项?

Bas*_*ian 3 c# abstract-class boilerplate object-initializers subclassing

在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" }
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?如果没有,T4模板可以提供任何帮助吗?

Jon*_*eet 6

为了让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")
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:另一种选择是使用属性,你写的地方:

[CarName("Mustang")]
public class Mustang : Car
Run Code Online (Sandbox Code Playgroud)

......写了适当的反思代码Car.我强烈建议你不要这样做.当然,属性在您的真实环境中可能很有用.