- PR -

継承したコントロールのReadOnlyプロパティのオーバーロード

投稿者投稿内容
junya_s0
常連さん
会議室デビュー日: 2002/12/23
投稿数: 26
投稿日時: 2002-12-23 17:44
はじめまして。
VB.NETでWindowsアプリケーションの開発を行っています。

現在、TextBoxクラスを継承したコントロールを作成しており、ReadOnlyプロパティで独自処理を行いたいと思っています。
しかし、下記のようにコーディングすると、"キーワードは、識別子として有効ではありません。"というビルドエラーが発生します。
ReadOnlyが予約語なのでエラーが出るのは当然といえば当然なのですが、これを回避する方法はあるのでしょうか?

それでは、よろしくお願いします。


コード:

Public Class Xxx
Inherits System.Windows.Forms.TextBox

Public Overloads Property ReadOnly() as Boolean
Get
'処理
End Get
Set(ByVal Value as Boolean)
'処理
End Set
End Property

'以下処理

End Class



[ メッセージ編集済み 編集者: junya_s0 編集日時 2002-12-24 16:03 ]
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2002-12-24 09:27
C#なら「@」とか「\u」とかいろいろやりようもあるんですが・・・。
そこだけC#で作ってみてはどうです?
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2002-12-24 09:41
ご質問の意味が「TextBoxのReadOnlyという名前のプロパティをoverrideする方法は?」
だとすれば、回答は「TextBoxでvirtual指定していないので、できない」となります。

  • VB.NETのOverloadsは、同名で引数が異なる場合に指定します。シグネイチャ(名前と引数)が同じ場合は、overrideもしくはnewを使用する必要があります。
  • readonlyは予約語ですが、TextBoxのReadOnlyは予約語ではありません。

(尚、C#の用語で言っているので、適宜VB.NETに読み替えて下さい。)

[ メッセージ編集済み 編集者: cats 編集日時 2002-12-24 09:46 ]
junya_s0
常連さん
会議室デビュー日: 2002/12/23
投稿数: 26
投稿日時: 2002-12-24 10:45
"overloads"と"overrides"ですかー・・・。
昔から混乱するんですよね。
書き間違いでした。申し訳ありませんでした。

で、"virtual"ですが、VB.NETでは"Overridable"のようですね(違う?)。
ということはReadOnlyプロパティで独自処理を入れることはできないのでしょうか。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 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 ]
NothingButXMLInfoSet
大ベテラン
会議室デビュー日: 2002/07/16
投稿数: 116
投稿日時: 2002-12-24 11:35
VBでは予約語と同じ名前については[]で囲めば利用できます。また、VB.NETでOverridableでないメソッドと同名のメソッドを定義したい場合はShadowsキーワードを使います。したがって、次のように書けばコンパイルは通ります。

コード:
Public Class TextBoxEx
	Inherits System.Windows.Forms.TextBox
	
	Public Shadows Property [ReadOnly]() As Boolean
		Get
			Return True
		End Get
		Set
		End Set
	End Property
End Class


ただし、これがお望みどおりの動作なのかどうかわかりません。Shadowsの効能についてはドキュメントを参照してください。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2002-12-24 11:37
>予約語と同じ名前については[]で囲めば利用できます。

うお、そんな機能があったのか。
勉強不足でした。

junya_s0
常連さん
会議室デビュー日: 2002/12/23
投稿数: 26
投稿日時: 2002-12-24 11:46
>予約語と同じ名前については[]で囲めば利用できます。

なるほど・・・。
Microsoftモノではちょくちょく見かける仕様ですね(Accessとか)。

ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)