VB2008: クラスの既定のプロパティの活用イメージに関して?

このQ&Aのポイント
  • VB2008でのクラスの既定のプロパティの活用イメージが知りたいです。既定のプロパティは省略した構文で書けるので便利だとはわかりますが、具体的な活用イメージが分かりません。
  • クラスの既定のプロパティについて質問です。VB2008でクラスの既定のプロパティを活用する方法を知りたいです。具体的な活用イメージが分からないため、教えていただけると助かります。
  • VB2008でのクラスの既定のプロパティに関して質問です。既定のプロパティは省略した構文で書くことができることは分かりますが、具体的にどのような場面で活用するのかが分からず困っています。具体的な活用イメージを教えてください。
回答を見る
  • ベストアンサー

VB2008: クラスの既定のプロパティの活用イメージに関して?

本日でちょうど60日目というVB.NET 初学者です。 未だ Sub Main() での基本事項の確認に終始しています。 3日まえより基本事項の最終課題にクラスを選んで挑戦中。 ですから、少し、質問しなければ判らないことだらけです。 今回の質問は、<既定のプロパティ>についてです。 ' ========================== ' クラス; 既定のプロパティ ' ========================== Module theDefault   Sub Main()     Dim T1 As New TEST1     T1(0) = "Kenji"     Debug.Print(T1(0))     Debug.Print(T1.MembersFriends(0))   End Sub End Module このように、確かに、既定のプロパティは省略した構文で書けるので便利。 それはわかります。 が、問題は、その具体的な活用イメージがサッパリです。 「例えば、こういうケースに使うととっても便利」という具体例があれば教えてください。

noname#140971
noname#140971

質問者が選んだベストアンサー

  • ベストアンサー
  • KG_
  • ベストアンサー率62% (34/54)
回答No.1

今回の回答は個人的見解ですので、機能本来の目的とはかけはなれているかもしれませんが、参考になればと思います。 既定のプロパティは、クラスの構成やメンバの名称に影響されるものと思います。動作自体はどちらも同じはずですから。 コーディングする上で用意されているクラスに「Rows」プロパティが あるとすると、これは内部に複数の値を持っていると想定できると思い ます。するとRows(Number)で個別に指定できると考えないでしょうか。 私はそうなんですけども(o_o; もちろんRows.Item(0)という形でアクセスできるプロパティもあるとは 思いますが、このようにクラスや名称で内部に複数値をもっていると 思わせる(?)名称の場合に、実装するようにはしています。 List,Rows,Items,Values等などをそうしています。何にでも実装している と、配列と間違えてしまう可能性もあるので、ケースバイケースとも思い ます。

noname#140971
質問者

お礼

昨日、はじめてプログラミングガイドとやらを印刷して読みました。 クラスでは、「多分!だろう!」という演習が出来なかったからです。 しかし、実に、小出しで繰り返しの多いガイドに閉口しています。 >既定のプロパティは、クラスの構成やメンバの名称に影響されるものと思います。 本職は服飾デザイナでプログラマではありません。 ですから、クラスなんてのも14年程まえに一度作っただけ。 アクセスのフォーム機能みたいなのを作りました。 <既定のプロパティ=フォームのレコードの主キー>というイメージは予測できます。 確かに、クラスというものはそれぞれですから既定値もそれぞれにそれぞれかと思います。 ところで、ガイドの小出し説明にイライラ感が強まっています。 ありがとうございました。

関連するQ&A

  • クラス

    VB.NET 学習58日目という初学者です。 未だ、Sub Main() でシコシコと基本事項の確認中です。 やっと構造体の演習を昨日から。 案の定、わからないことに遭遇しました。 ' ============================== ' TEST1、TEST2 の BSave、BLoad ' ============================== Module theTEST1   Sub Main()     ' -----------------------     ' TEST1 の BSave、BLoad     ' -----------------------     Dim T1 As New TEST1     T1.Member1 = "T1.Member1"     T1.Member2 = "T1.Member2"     BSave(T1, "D:\Temp\T1.BIN")     T1.Member1 = "AAA"     T1.Member2 = "BBB"     Debug.Print(T1.Member1)     Debug.Print(T1.Member2)     T1 = CType(BLoad("D:\Temp\T3.BIN"), TEST1)     If T1.Member1 <> Nothing Then ' Null エラーが回避できない!       Debug.Print(T1.Member1)       Debug.Print(T1.Member2)     Else       Message("")     End If     ' -----------------------     ' TEST2 の BSave、BLoad     ' -----------------------     Dim T2 As TEST2     T2.Member1 = "T2.Member1"     T2.Member2 = "T2.Member2"     BSave(T2, "D:\Temp\T2.BIN")     T2.Member1 = "AAA"     T2.Member2 = "BBB"     Debug.Print(T2.Member1)     Debug.Print(T2.Member2)     T2 = CType(BLoad("D:\Temp\T3.BIN"), TEST2)     If T2.Member1 <> Nothing Then       Debug.Print(T2.Member1)       Debug.Print(T2.Member2)     Else       Message("")     End If   End Sub End Module Function BLoad(ByVal aPath As String) As Object   If File.Exists(aPath) Then     Try       Using fs As New FileStream(aPath, FileMode.Open, FileAccess.Read)         Dim bf As New BinaryFormatter         Dim aObject As Object = bf.Deserialize(fs)         fs.Close()         Return aObject       End Using     Catch ex As IOException       MsgBox(ex.Message & "(BLoad)", , "エラー:")       Return Nothing     End Try   Else     Return Nothing   End If End Function T1 はクラスライブラリで定義。 T2 は構造体。 構造体の場合は、Nothing でチェックできました。 しかし、クラスライブラリの場合はチェックできません。 このエラーの考え方と処し方を教えてください。 構造体とクラスライブラリは表向きは同じようなもの。 ですから、どちらにも通用する BSave、BLoad 関数を作成使用としたわけです。 宜しくお願いします。

  • VB2008: 独自例外とは?

    独自例外の確認ための質問をします。 独自例外の発生をキャッチして表示する術がわからなくて苦肉の策でエラートラップを利用。 しかし、こういう事であれば何も独自例外を設定する必要がありません。 と思ったり、「スルーだからテストに<0除算>を選んだのが悪いのか?」と考えたり。 ともかく、判っているのか判っていないのかが判らない状態に陥っています。 そういうことで、独自例外について少し教えて頂ければ幸いです。 ' ============================== ' クラスプログラミング; 演習2 ' ============================== Module theClass   Sub Main()     On Error GoTo Error_Main     Dim T1 As New TEST1     Debug.Print(T1.MembersLengthAverage.ToString) Exit_Main:     Exit Sub Error_Main:     ErrorMsg(Err.Description & "(Main)")     Resume Exit_Main   End Sub End Module ' ================================================================== ' クラス TEST1 ' ================================================================== <Serializable()> Public Class TEST1   Private _MemberCount As Integer   Private _Member1 As String   Private _Member2 As String    ReadOnly Property MembersLengthAverage() As Integer     Get       If _MemberCount <> 0 Then         Return (_Member1.Length + _Member2.Length) \ _MemberCount       Else         Throw New System.Exception("TEST1: 除算エラーが発生しました。" )       End If     End Get   End Property   Public Sub New()     _Member1 = ""     _Member2 = ""   End Sub End Class

  • VB.Net: クラスの共有メソッドの作り方?

    あと3日でVB.Net学習2ヶ月目という初学者です。 Sub Main() のみで基本事項の確認のみをしてきました。 ですから、フォーム、レポート、データベース、WEB関連の知識は完全にゼロ。 さて、その基本演習も最終段階に突入。 いよいよクラスです。 ' ============================== ' クラスプログラミング; 演習3 ' ============================== Module theClass   Sub Main()     Dim T1 As New TEST1     T1.Member1 = "T1.Member1"     T1.Member2 = "T1.Member2"     T1.BSave("D:\Temp\T1.bin", DirectCast(T1, Object)) <--- ?1     T1.Member1 = "AAA"     T1.Member2 = "BBB"     Debug.Print(T1.Member1)     Debug.Print(T1.Member2)     T1.BLoad("D:\Temp\T1.bin", T1) <--- ?2     If T1 IsNot Nothing Then       Debug.Print(T1.Member1)       Debug.Print(T1.Member2)     Else       Message("T1.bin は読み込めませんでした。")     End If   End Sub End Module ?1=インスタンスを経由する共有メンバ、・・・へのアクセスです。正規の式は評価されません。 ?2=Option strict on では、'ByRef' パラメータのオブジェクトの値を・・・縮小変換できませんでした。 Public Shared Sub BSave(ByVal aPath As String, ByVal aObject As Object)   Try     Using fs As New FileStream(aPath, FileMode.Create, FileAccess.Write)       Dim bf As New BinaryFormatter       bf.Serialize(fs, aObject)       fs.Close()     End Using   Catch ex As IOException     MsgBox(ex.Message & "(BSave)", MsgBoxStyle.Exclamation, "エラー:")   End Try End Sub Public Sub BLoad(ByVal aPath As String, ByRef aObject As Object)   If File.Exists(aPath) Then     Try       Using fs As New FileStream(aPath, FileMode.Open, FileAccess.Read)         Dim bf As New BinaryFormatter         aObject = bf.Deserialize(fs)         fs.Close()       End Using     Catch ex As IOException       MsgBox(ex.Message & "(BLoad)", MsgBoxStyle.Exclamation, "エラー:")     End Try   End If End Sub 非共有の BSaveメソッドとBLoadメソッドのパラメータはファイルパスだけ。 共有メソッドの場合は、「何を」というのが必要かと思って2つ目のパラメータを追加。 もって、構造体の BSave と BLoad とに援用するテストをしたいと思っています。 し、しかし、上述の2つのエラーを前にどうしてよいか皆目わかりません。 >そのエラーを回避、もしくは発生させないためには次のように改造したらよい! そういう回答等をお願いします。

  • VBA クラスにプロパティが実装できません

    VBA初心者です。 現在、Excel2003-VBAでクラスにプロパティの実装を試みていますが、うまくいきません。 Publicで宣言する方法は問題なく出来たのですが…。 勉強用のため、敢えて簡単なサンプルを自分で作っています。 【状況】 下記プログラムで、メッセージを「20」と表示させたいのですが、 「スタック領域が不足しています」エラーにより、実行できません。 また「Atai」を「Suji」にかえると、メッセージとして「0」と出てきます。 あるいは、「Suji = Atai + 5」を消してみても「15」ではなく「0」と出ます。 【質問】 どちらでもうまくいかないのですが、これは (1)このコードがおかしいのか、それとも (2)単純なプログラムであるのに領域不足と出るところから、 VBA特有の不具合でどうしようもない物なのでしょうか? ご意見お待ちしています。 ===通常Module(呼び出し側)=== Option Explicit Sub 実行() Dim Haichi As New Class1 With Haichi .Suji = 15 .MSGクラス End With End Sub ===クラスMODULE(Class1)=== Option Explicit Sub MSGクラス() MsgBox Suji End Sub Public Property Let Suji(Atai As Double) Suji = Atai + 5 End Property Public Property Get Suji() As Double End Property

  • PathSeparatorプロパティ

    PathSeparatorプロパティってどういうときに使うのでしょうか? Sub Sample() Debug.Print Application.PathSeparator End Sub をしても絶対に¥が返ってくるのですが、 パソコンのパスセパレーターが¥じゃない人もいるのですか?

  • Passwordプロパティ

    Sub test() Debug.Print ActiveWorkbook.Password End Sub を実行すると ******** が返ってくるのですが パスワードはかけてないファイルでも、かけてるファイルでも 必ず「********」が返ってくるのですか? だとしたら意味のないプロパティな気がするのですが・・・・

  • VB2008: 構造体に関するMSDNの解釈について!

    ' ================== ' 構造体変数の代入 ' ================== Module theTEST   Private Structure TEST4     Dim MembersCount As Integer     Dim Member1 As String     Dim Member2 As String   End Structure   Sub Main()     Dim T4_1 As TEST4     Dim T4_2 As TEST4     T4_1.MembersCount = 1     T4_1.Member1 = "T4_1:Member1"     T4_1.Member2 = "T4_1:Member2"     T4_2 = T4_1     Debug.Print(T4_2.MembersCount.ToString)     Debug.Print(T4_2.Member1)     Debug.Print(T4_2.Member2)   End Sub End Module [イミディエイト ウインドウ] 1 T4_1:Member1 T4_1:Member2 >構造体の要素が文字列型 (String) やオブジェクト型 (Object) などの参照型である場合は、データへのポインタがコピーされます。 (http://msdn.microsoft.com/ja-jp/library/18ytyskd(VS.80).aspx) このMSDNライブラリの説明によると、 [イミディエイト ウインドウ] 0 T4_1:Member1 T4_1:Member2 という結果を得るというのが私の予測。 もしかしたら、MSDNライブラリの説明の舌足らず。 >構造体の要素が値型であらば値がコピーされますが、文字列型 (String) やオブジェクト型 (Object) などの参照型である場合は、データへのポインタがコピーされます。 ということでしょうか?

  • VB.NET 2008 Eventステートメント

    VB.NET 2008 以下の実装で実行したところ、GC強制実行後のメモリ状態に疑問を持ち質問しました。 Eventを所持したクラスの生成、削除を繰り返し、GCを強制実行したところ、 16バイトごと増加していきます。 Class1で定義したm_eventをイベントから別のタイプ、例えばIntegerやString型に変更して、 同様に実行したところ、メモリの増加は見受けられません。 なぜでしょうか? またこの現象はメモリリークといえるのでしょうか? Public Class Class1 Public Sub New() End Sub Private Event m_event() End Class Sub Main() GC.Collect() Debug.Print("####") Debug.Print(GC.GetTotalMemory(False)) Dim cls As Class1 For i As Integer = 0 To 1000 cls = New Class1 cls = Nothing If i = 0 Then GC.Collect() Debug.Print(GC.GetTotalMemory(False)) End If Next GC.Collect() Debug.Print(GC.GetTotalMemory(False)) Debug.Print("@@@@") End Sub

  • イミディエイトウインドウの活用方法

    イミディエイトウインドウに 「?len("aaa")」と入力しエンターキーを押すと 実行され「3」と表示されることがわかったのですが こういうことはどういう場合に使うのでしょうか? Sub test() Debug.Print Len("aaa") End Sub と同じ意味ですよね? わざわざ標準モシ゛ュールに Sub test() Debug.Print Len("aaa") End Sub を書くのは面倒なときに イミディエイトウインドウで ?len("aaa") とすれば楽だ! という時に使うのでしょうか?

  • プロパティを通さなければアクセスできない変数を設定したい(VB2005)

    下記はメンバ変数とプロパティのコードです。 -------------------------------------- 'メンバ変数 Private _hoge As Integer = 1 'プロパティ Private ReadOnly Property phoge()   Get     Return _hoge   End Get End Property -------------------------------------- 上記の構造だと、同じクラス内であれば、下記のようにメンバ変数へプロパティを通さずアクセスが可能です。 Private Sub aaa()   MessageBox.Show(_hoge)   ' 1 と表示される(ここでエラーを出したい) End Sub 質問内容は、変数_hogeに対してアクセスするには、(同じクラス内からのアクセスであっても)プロパティを通さなければならない形にしたい、というものです。 つまり、下記のような形でないとエラーが発生するようにしたいと考えています。 Private Sub aaa()   Dim foo As Integer = phoge()   MessageBox.Show(foo) End Sub どうぞよろしくお願い致します。

専門家に質問してみよう