掲示板お問い合わせランダムジャンプ



この広告は30日以上更新がないブログに表示されております。 新しい記事を書くことで広告を消すことができます。

Top Index

2005年03月06日
プロパティとPublic変数
クラスにプロパティを作るとき、通常は「Public Property A As String」のように宣言して使用します。

が、プロパティ変更時になんらかの処理が必要という場合を除き、単純に「Public A As String」と宣言してしまっても、ほぼ問題がないことに今更ながら気づいた。

言われてみれば、当たり前のことなんですけどね・・・

Propertyを記述すると約8行かかるところが、Public変数の宣言文1行で置き換えられるとなると、今まで結構無駄なコーディングしてたなぁ・・・


追記 2005/03/23
上記の方法はあまり好ましい宣言方法ではありません。
詳細はコメントをご覧ください。
[ 投稿者:mk3008 at 23:59 | VB.NET | コメント(5) | トラックバック(1) ]

この記事へのコメント
うーん
はじめまして、じゃんぬ と申します。

> ほぼ問題がないことに今更ながら気づいた。

でも、プロパティを使っておくと、
外部に公開されている、機能の実装の修飾であると明示化できますよね。
投稿者: じゃんぬねっと at 2005-03-22 10:58:58
横着ですね
ご意見ありがとうございます。管理人mk3008と申します。

上記宣言方法の違いについての詳細を、自分なりに検証してみました。

機能的な面として、
・ユーザーコントロールの場合、「Public Property A」と宣言すれば、フォームデザイン時に「プロパティA」を変更可能だが、「Public A」の場合はできない。
・「Public A」と記述した場合、「Overridableキーワード」をつけられない。
上記2点が確認できました。

機能的以外の面としては、ご指摘のとおり、「明示的にPublicなProperty」と宣言するのは、視認性という点で優位かと思います。
Public変数と、Public Propertyが混在すると、視認性が低そうですし。

どうも、Public Propertyと宣言するほうが好ましい感じですね。
ただ、Public Propertyで宣言した場合、Private変数に代入するだけのコードを記述する冗長感がたまらないのです・・・。
なんとかならないものですかね。
投稿者: mk3008 at 2005-03-23 00:21:20
冗長かどうか...
冗長かどうかについてですが、OOP とは良い冗長なのです。
もし、冗長がイヤなのであればベタな C またはアセンブラなどをやることになります (^^)

私の場合、プロパティ変数は「直接触るな」という意味で、アンダースコアをつけます。

'/ プロパティ 変数 Define
Private _Format As String

Public Property Format() As String
  Get
    Return _Format
  End Get

  Set(ByVal value As String)
    _Format = value
  End Set
End Property

なお、このクラス内からのアクセスは、
Me.Format のようにして、_Format は一切触らないようにするのが筋です。
投稿者: じゃんぬねっと at 2005-03-23 10:07:18
なるほど
プロパティ変数の名前付けに悩むところがありましたので、じゃんぬさんの
>プロパティ変数は「直接触るな」という意味で、アンダースコアをつけます。
というのは大変わかりやすく、納得です。
早速、その命名規則を使わせていただきます。
ありがとうございました。
投稿者: mk3008 at 2005-03-23 22:52:18
この命名規則は
この命名規則は結構有名です。
というのも、C++ でもそうなのですが、
互換のために用意された関数なんかは、
アンダースコアがついてますよね?

# _itoa とかなんかそうですね。

これは、「あまり使わないでよー」という意味だったような気がします。
投稿者: じゃんぬねっと at 2005-03-23 23:51:38

この記事へのトラックバック
クラスや構造体はPublicにするかPropertyにするか〜VS2008
自作のクラスや構造体を作るとき、おそらく、外から取得、設定する変数をどのように書くか?という悩みに直面するかと思う(ない?)。実際、Public A As Int32と宣言(フィールド)しても、Public Property A As Int32・・・End Propertyと宣言(プロパティ)しても、外から見れば、クラス.Aで取得設定できる訳で、前者の方が行数も少なくてソースがすっきりしているように見える。MSDNのソースではフィールド宣言されている物もあるので、プロパティなんて長ったらしい宣言をしなくても良いような気もする。(例えば、リッチテキストボックスの印刷例の構造体宣言)しかし、以前書いたようにDisplayMemberを設定する際、フィールド宣言ではリストに正しく表示されず、プロパティにすると正しく表示された例がある。また、フィールドではOverridableが利用できないため、たとえば、自分の場合、継承クラスをXMLへシリアライズするソースを書いたのだが、ベースはAを出力、継承はAを出力しないといった場合、フィールドではこれが解決できないため、プロパティを利用して、ベースは、Public Overridable Property A As Int32・・・End Propertyで出力継承側は<XmlIgnoreAttribute()> _Public Overrides Property A As Int32・・・End Propertyで出力しないと宣言することで解決した。こうやってみるとやはりプロパティは必要なのか?と感じて、どちらを使えばよいのか悩んでしまう。ちょっと検索してみると、やはり同じことを考えている方がいらっしゃり、結果として、フィールド宣言はあまり好ましくないと結論づけされています。さらに調べるといつもお世話になっているVisual Basic中学生でいろいろと詳しい解説がなされています。自分だけで使うクラスとか、テスト的なプログラムだったら、フィールド宣言でも問題はないと思いますが、人にも使ってもらうクラスを作るなら、ソースは長くなっても、プロパティを使った方がいいということで。参考URLプロパティの作成宣言の効果プロパティとPublic変数関連投稿ListBoxやComboboxのDisplayMemberを考える〜VS2008いまさら聞けないXML〜VB.netでXMLをシリアライズして保存してみる...
投稿者: ロケッこがゆく at 2013-01-23 13:07:29

この記事へのトラックバックURL
http://shinshu.fm/MHz/88.44/a02480/0000033899.trackback

この記事の固定URL
http://shinshu.fm/MHz/88.44/archives/0000033899.html

記事へのコメント
 
簡単演算認証: 3 x 6 + 5 =
計算の答えを半角英数字で入力して下さい。
名前: [必須]
URL/Email:
タイトル:
コメント:
※記事・コメントなどの削除要請はこちら