1

DateValueTextBox WebControl を拡張して、コード ビハインドで値をプロパティ () として公開する一種の「DateTextBox」として機能させます。

public sealed class DateTextBox : TextBox
{
    public DateTime ?DateValue
    {
        /* ToDateFromUserInterface() and ToUserInterfaceString() are both
           extension methods */

        get
        {
            return
            (
                String.IsNullOrEmpty(Text) ?
                new DateTime?() :
                Text.ToDateFromUserInterface()
            );
        }

        set
        {
            if (value != null) Text = ((DateTime)value).ToUserInterfaceString();
        }
    }
}

このコントロールは日付でのみ使用されることになっているため、親からTextプロパティを継承する理由はありません。

それを非表示にする方法はありますか?.. a を実装する以外にNotImplementedException、次のように:

new public String Text
{
    get { throw new NotImplementedException(); }
    set { throw new NotImplementedException(); }
}
4

3 に答える 3

4

それをオーバーライドして、日付の文字列バージョンを提供するだけです。基本クラスから継承するときはいつでも、通常、このように既存のインターフェースを変更しようとするのは悪い考えです...それはすべてのオブジェクト指向の慣行に反します:-P

于 2009-10-06T13:00:55.687 に答える
2

EditorBrowsable 属性を使用できます。プロパティを Intelisense から非表示にするだけで、基本クラスとのコンパイル時の互換性を損なうことはありません。

ただし、名前がわかっている場合は引き続きプロパティを使用できます。

PS: この記事の最後にあるユーザー コメントを読んでください。 http://msdn.microsoft.com/en-us/library/system.componentmodel.editorbrowsableattribute.aspx

于 2009-10-06T13:33:58.723 に答える
1

別のクラスを継承するクラスを作成している場合、親メソッドのすべてのプロパティは依然として関連している必要があります。この場合、get の日付のテキスト表現を返し、set のテキスト表現を解析できます。

于 2009-10-06T13:02:21.137 に答える