- - PR -
継承したコントロールのReadOnlyプロパティのオーバーロード
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2002-12-23 17:44
はじめまして。
VB.NETでWindowsアプリケーションの開発を行っています。 現在、TextBoxクラスを継承したコントロールを作成しており、ReadOnlyプロパティで独自処理を行いたいと思っています。 しかし、下記のようにコーディングすると、"キーワードは、識別子として有効ではありません。"というビルドエラーが発生します。 ReadOnlyが予約語なのでエラーが出るのは当然といえば当然なのですが、これを回避する方法はあるのでしょうか? それでは、よろしくお願いします。
[ メッセージ編集済み 編集者: junya_s0 編集日時 2002-12-24 16:03 ] | ||||
|
投稿日時: 2002-12-24 09:27
C#なら「@」とか「\u」とかいろいろやりようもあるんですが・・・。
そこだけC#で作ってみてはどうです? | ||||
|
投稿日時: 2002-12-24 09:41
ご質問の意味が「TextBoxのReadOnlyという名前のプロパティをoverrideする方法は?」
だとすれば、回答は「TextBoxでvirtual指定していないので、できない」となります。
(尚、C#の用語で言っているので、適宜VB.NETに読み替えて下さい。) [ メッセージ編集済み 編集者: cats 編集日時 2002-12-24 09:46 ] | ||||
|
投稿日時: 2002-12-24 10:45
"overloads"と"overrides"ですかー・・・。
昔から混乱するんですよね。 書き間違いでした。申し訳ありませんでした。 で、"virtual"ですが、VB.NETでは"Overridable"のようですね(違う?)。 ということはReadOnlyプロパティで独自処理を入れることはできないのでしょうか。 | ||||
|
投稿日時: 2002-12-24 11:34
あっ!・・・そうか。
virtual(VBではOverridable)宣言されてないので仮想メンバではないんだったか。 >ReadOnlyプロパティで独自処理を入れることはできないのでしょうか。 「隠蔽」で良いならできます。(VB.NET Shadowsキーワード参照) できますが、如何せんキーワード(予約語)は・・・。 VB.NETでも、「C#の@」みたいな機能が無いってことは・・・あるかもしれませんね。 だってVB.NETだし。 VB.NETってマイクロソフトっぽいんですが。「沢山使われているんだから、みんな俺に合わせろ」みたいな。 本来は、他の言語で作られたメンバが自分の言語のキーワードと重なることだって十分に考えられるわけだから、それに対応するように言語仕様を作るべきなのに、「俺はみんなに使われているんだから、他の言語で何か作ろうとしたらVB.NETの仕様をちゃんと意識しろよ〜」と言っているような気がしてむしょ〜に腹が立つ! と、VB.NET嫌いの私が(以下略) [ メッセージ編集済み 編集者: 一郎 編集日時 2002-12-24 11:35 ] | ||||
|
投稿日時: 2002-12-24 11:35
VBでは予約語と同じ名前については[]で囲めば利用できます。また、VB.NETでOverridableでないメソッドと同名のメソッドを定義したい場合はShadowsキーワードを使います。したがって、次のように書けばコンパイルは通ります。
ただし、これがお望みどおりの動作なのかどうかわかりません。Shadowsの効能についてはドキュメントを参照してください。 | ||||
|
投稿日時: 2002-12-24 11:37
>予約語と同じ名前については[]で囲めば利用できます。
うお、そんな機能があったのか。 勉強不足でした。 | ||||
|
投稿日時: 2002-12-24 11:46
>予約語と同じ名前については[]で囲めば利用できます。
なるほど・・・。 Microsoftモノではちょくちょく見かける仕様ですね(Accessとか)。 ありがとうございました。 |