Textboxのテキスト内の文字列長を取得する場合、
TextBox.Text.length
ってのと
TextBox.Textlength
があるのですが、どちらでもうまくいきます。ヘルプを見たのですが、
TextlengthはTextboxのメンバーだということがわかったのですが、
TextBox.Text.lengthの意味がよくわかりません。
初心者で基本的なことがわかってないと思うのですが、どなたか
ご教授でがねないでしょうか。よろしくおねがいします。
すいません。VB.NETです。
編集 削除String型(System.String構造体)には、Lengthプロパティという物があります。
そして、TextプロパティはString型のデータを返します。
それゆえ、TextBox1.Text.Length のような記述ができるわけですね。
TextBoxクラスのメンバであるTextBox.TextプロパティはString型です。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformstextboxclasstexttopic.asp
そして、Stringクラスのメンバを見てみると文字数を取得するためのString.Lengthプロパティがあります。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemstringmemberstopic.asp
なので、
TextBox.Text.Length
で文字数を取得することもできます。
おおっ!
では、TextってのはStringクラスのオブジェクトって考えて
いいんでしょうか?
つまりTextboxクラスからするとStringクラスは、メンバオブジェクト
って考えることができるんですよね?
ちがいますか?すっとんきょーなこといってます?
すいません。自信がないです。僕を男にしてください!!
おねがいします!
そういう感じで大丈夫だと思いますけど、
実際には、TextBox.Textはそれ自体がメンバオブジェクトっていうわけではなく、TextBoxオブジェクトが保持しているStringオブジェクトへのアクセス方法をTextBox.Textプロパティが外部に提供している感じだと思います。たぶん。
> では、TextってのはStringクラスのオブジェクトって考えて
> いいんでしょうか?
およそ正解ではないでしょうか。くどっぽく書けば、
TextBoxクラスが公開するTextプロパティというインターフェースは
Stringクラスのオブジェクトでやりとりする。
> つまりTextboxクラスからするとStringクラスは、メンバオブジェクト
> って考えることができるんですよね?
part-of や has a のイメージがからんでますかね?
こちらはちょっと表現があいまいすぎる感があります。
「Stringクラスは、メンバオブジェクト」というように「クラスがメンバ」
と言ってしまうとTextBoxクラス内で定義されているPrivateなクラスを
イメージしてしまったり、また「クラスがオブジェクト」となると
メタクラスかなとも思います。
「Textboxクラスからすると」という視点は、クラス内をホワイトボックス
として分析する視点だと思いますが、そうなると、
TextBoxクラスはTextBoxBaseクラスを継承し、TextBoxBaseクラスは
Controlクラスを継承しています。
そして、TextプロパティはこのControlクラスで定義されているインターフェース
です。
このような継承関係を踏まえて述べるなら、
「TextBoxクラスからするとStringクラスは……
Baseクラスが公開しているTextプロパティにおいて
値の格納に、このクラスのメンバオブジェクトを利用している」
(実際に格納しているのはBaseクラスなのか、それとも
TextBoxクラスが自身でオーバーライドしているのかは内部実装を調べないと
わからない)
上記の言い回しはちょっと苦しい繋ぎ方ですが、
「TextboxクラスからするとStringクラスは、メンバオブジェクト」
というのが、先のようなイメージなら、およそ正解だと思います。
ありがとうございました。
わかりやすい説明でした。
みなさん、やさしくわかりやすい説明で
自信がもてました。これで男になることができました。ぺこりー