C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■103055 / 2階層)  共通のSubを複数のFormから使うには
□投稿者/ 魔界の仮面弁士 (3758回)-(2024/04/09(Tue) 18:09:39)
2024/04/09(Tue) 18:10:27 編集(投稿者)

No103053 (とっちゃん さん) に補足
> 個人的にはMySub は Module に定義するのではなく datt 構造体の
> メソッドとして定義するほうがいいのかな?と思います。
> datt.MySub をインスタンスメソッドにすれば、パラメータで渡す必要もありません。

MySub は、「datt 構造体の配列」を処理しているようなので、
単一インスタンスに対するインスタンスメソッドだと都合が悪いかも知れません。
(MySub の実装にもよるけれど)


配列操作を datt 構造体自身に実装するとしたら、

 Public Structure datt
  Dim da1 As Single
  Dim da2 As Single
  Public Shared Sub MySub(dat() As datt)
   'For n = 0 To 10
   ' Debug.WriteLine(dat(n).da1)
   'Next
  End Sub
 End Structure


のように、共有メソッド(C# でいうところの静的メソッド)にするか、もしくは

 Class dattList
  Inherits List(Of datt)
  Public Sub MySub()
   'For n = 0 To 10
   ' Debug.WriteLine(Me(n).da1)
   'Next
  End Sub
 End Class

のように、コレクションクラスに対するインスタンスメソッドに変更する必要があるかもしれません。


あるいは、dat 配列に対する拡張メソッドを用意するという手も。

 Module Module1
  <System.Runtime.CompilerServices.Extension>
  Public Sub MySub(ByVal dat() As datt)
   'For n = 0 To 10
   ' Debug.WriteLine(dat(n).da1)
   'Next
  End Sub
 End Module



ただいずれにせよ、
「エラー BC30179 structure 'datt' と structure 'datt' が namespace 'WindowsApp1' で競合しています」
の原因は、『Public Structure datt』が 2 箇所に存在している事が原因なので、
> datt.vb を作ってそこに定義すればよいです(もしくは、Module1.vb の Module 定義の外側)。
などのようにして、まずは重複を排除することが肝要ですね。
MySub の記述位置を考えるのは、その後の話。
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[1]: 共通のSubを複数のFormから使うには /とっちゃん →Re[3]: 共通のSubを複数のFormから使うには /かりん
 
上記関連ツリー

共通のSubを複数のFormから使うには / かりん (24/04/09(Tue) 14:35) #103052
Re[1]: 共通のSubを複数のFormから使うには / 魔界の仮面弁士 (24/04/09(Tue) 15:34) #103054
Re[1]: 共通のSubを複数のFormから使うには / とっちゃん (24/04/09(Tue) 15:13) #103053
  └ 共通のSubを複数のFormから使うには / 魔界の仮面弁士 (24/04/09(Tue) 18:09) #103055 ←Now
    └ Re[3]: 共通のSubを複数のFormから使うには / かりん (24/04/11(Thu) 16:12) #103057 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信