VB.net List<T> クラスを継承したクラスを使いたい

huahi11115 640 評価のポイント
2024-10-08T22:46:55.9666667+00:00

Microsoft Visual Studio Community 2022 (64 ビット) - Current Version 17.11.2

.Net Framework 4.8.1

System.Collections.Generic.List<T>を継承した独自クラスを使いたいです。

Public Class CL1
   Inherits List(Of Integer)
End Class

ところが、メイン側からCL1.add(233) としてもコンパイルが通りません。

CL1. の後にインセリセンスでList<T> クラス関連のメソッドが出てきません。

同様に、

Public Class CL2
   Inherits Stopwatch
End Class

こうすると、Stopwatchクラス関連のメソッドでStartNew()だけは使用可能で

CL2.StartNew() という使い方ができます。

この違いは何ですか。

なぜCL1からList<T> クラス関連のメソッドが使えないのですか。

開発者テクノロジ | .NET | その他
開発者テクノロジ | .NET | その他

.NET ソフトウェア フレームワークに基づく Microsoft テクノロジ。 特定のカテゴリに適合しないその他のトピック。

開発者テクノロジ | VB
開発者テクノロジ | VB

Microsoft が開発した、.NET で使用できるオブジェクト指向のプログラミング言語。

0 件のコメント コメントはありません

質問作成者が受け入れた回答
gekka 14,551 評価のポイント MVP ボランティア モデレーター
2024-10-09T00:04:20.0466667+00:00

ところが、メイン側からCL1.add(233) としてもコンパイルが通りません。

CL1はインスタンス(Newで作られたオブジェクト)ではないのであれば、Sharedではないメンバ関数は呼び出せません。

List(Of T).Addの定義は以下のようになっています

Public Sub Add (item As T)

以下のようにインスタンスを作成して、インスタンスに対してのAddであればインテリセンスで候補表示されるはずです

Dim cl1 As New CL1()
cl1.Add(1)

Stopwatchクラス関連のメソッドでStartNew()だけは使用可能で

Stopwathc.StartNewはSharedが指定されているのでインスタンスのメンバ関数ではなく、インスタンスなしで呼び出せるメンバ関数です。

Public Shared Function StartNew () As Stopwatch

VBはModuleのメンバがSharedのように型を意識しない使われかたをされるので、自作クラスや構造体のSharedを意識することがC#に比べると少ないですが、意識するようにしましょう。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。

0 件の追加の回答

並べ替え方法: 古い順

お客様の回答

質問作成者は回答に "承認済み"、モデレーターは "推奨" とマークできます。これにより、ユーザーは作成者の問題が回答によって解決したことを把握できます。