thisのような他のスレッドを読んだが、それらは私のためには機能しませんでした。私は今にClassBの新しいオブジェクトを作成した場合、私は 継承されたメンバを非表示に継承
_shouldBeInteger, _shouldBeBool, _shouldBeDateTime;
shouldBeInteger,shouldBeBool,shouldBeDateTime
を取得しかし、私は、ユーザーに_variablesを非表示にする
public class ClassA
{
public string _shouldBeInteger;
public string _shouldBeBool;
public string _shouldBeDateTime;
}
public class ClassB : ClassA
{
public int? shouldBeInteger
{
get { return (_shouldBeInteger != null) ? Convert.ToInt32(Convert.ToDouble(_shouldBeInteger)) : new int?(); }
set { _shouldBeInteger = Convert.ToString(value); }
}
//... same thing with datetime etc.
}
:
は、私は2つのクラスを得ました。 ClassBでそれらをプライベートに設定すると、それらがオーバーライドされますが、文字列値を解析するためにはそれらにアクセスする必要があります。更新
主に、彼らは書き込み可能でなければならない理由であるクラスC充填ClassAs'の値は、あります。そこに私が動作する方法を変更するための方法はありませんが、私はにClassAのコントロールに完全だとClassBの
ClassC //not changeAble for me
{
//infomagic filling values of ClassA
}
にClassAのプログラマは奇妙で、それを生成しているため、民間への変数は動作しませんにClassAの設定方法。
ソリューション
にClassAがinheritated以外のクラスに読める書き込み可能である必要がありますが、ないので、私は最終的に、この得た:ClassBのは与えることなく、theeseの特性で動作するようになり
ClassA
{
public string _shouldBeInteger { protected get; set; }
//and so on
}
を彼らは外にいる。 インテリセンスはまだそれらを示していますが、使用して検討するかもしれない:
[EditorBrowsable(EditorBrowsableState.Never)]
はそれを解決します。
ありがとうございます。
あなたがプライベートフィールドを設定すると動作しません言ったとき、彼らは公共である必要はないか、仕事を保護するのでしょうか? –
アンダースコアの接頭辞は 'public members'のものではなく、' private members'の標準です – gdoron
@ gdoronのコメントをちょっと吟味するだけで、アンダースコアプレフィックスはCLSに準拠していないので標準ではありませんが、CLS準拠の心配はありません。したがって、CLS準拠の警告では最終的なリリースには適していないとの警告が表示されます。 –