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 に答える