3

在 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 模板有帮助吗?

4

2 回答 2

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")
    {
    }
}

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

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

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

于 2012-11-24T10:14:46.083 回答
1

您可以通过构造函数执行此操作,您需要在其中调用基类构造函数。

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

这基本上也应该有效。

于 2012-11-24T10:11:54.297 回答