11

基本クラスでは、次のプロパティがあります。

public virtual string Text 
{
    get { return text; }
}

それを上書きして別のテキストを返したいのですが、テキストも設定できるようにしたいので、次のようにしました。

public override string Text
{
    get { return differentText; }
    set { differentText = value; }
}

ただし、これは機能しません。setアクセサーが設定されていないため、オーバーライドできないという赤い波線が表示されます。なぜこの問題なのですか?私は何をすべきか?

4

5 に答える 5

6
public virtual string Text 
{
    get { return text; }
    protected set {}
}

このように基本クラスのプロパティを変更すると、存在しないsetメソッドをオーバーライドしようとしています

于 2009-08-04T12:27:55.770 に答える
2

基本クラスからプロパティを非表示にすることができます:

public new string Text
{
    get { return differentText; }
    set { differentText = value; }
}

ただし、その場合、そのプロパティは、基本タイプではなく、このタイプの変数を介してオブジェクトを操作する場合にのみ使用されます。

于 2009-08-04T13:00:38.953 に答える
2

カプセル化を破っているので問題です。何かをオーバーライドしてアクセスしやすくすることはできません。これにより、カプセル化に関するすべてが窓の外に投げ出されます。

それがルールであり、元の値ではないものを実際に公開しているにもかかわらず、あなたの場合にも適用されます。

あなたが試みたことを正確に行う方法はありません。基本クラスでセッターを作成するか、新しい値を設定する別の方法を使用する必要があります。

于 2009-08-04T12:41:31.777 に答える