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

huahi11115 335 評価のポイント
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 テクノロジ。
71 件の質問
VB
VB
.NET Framework 上に実装される、Microsoft によって開発されたオブジェクト指向プログラミング言語。 旧称 Visual Basic .NET。
10 件の質問
0 件のコメント コメントはありません
{count} 件の投票

承認済みの回答
  1. gekka 9,916 評価のポイント 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 件の追加の回答

並べ替え方法: 最も役に立つ

お客様の回答

回答は、質問作成者が [承諾された回答] としてマークできます。これは、ユーザーが回答が作成者の問題を解決したことを知るのに役立ちます。