4

名前空間の代わりにクラスがインポートされ、そのクラスのすべての静的メンバー/メソッドが使用可能になるコードを見てきました。これはVBの機能ですか?それとも他の言語もこれを行いますか?

TestClass.vb

public class TestClass
    public shared function Somefunc() as Boolean
        return true
    end function
end class

MainClass.vb

imports TestClass

public class MainClass
    public sub Main()
        Somefunc()
    end sub
end class

これらのファイルはApp_Codeディレクトリにあります。私はこれまでこれを行うことを考えたことがなく、どこでもそれについて読んだことがないので、ただ興味があります。

4

5 に答える 5

4

この機能が導入された理由の 1 つは、Visual Basic 6.0 のインスタンス化用の GlobalMultiUse オプションをエミュレートするためです。Visual Basic 6.0 には、DLL の境界を越えてモジュールを公開する機能がありません。代わりに、インスタンス化プロパティを に設定しますGlobalMultiUse。主に、一連の数学関数をエクスポートするクラスのようなユーティリティ クラスに使用されます。

を使用してクラスのサブルーチンまたは関数を呼び出すたびにGlobalMultiUse Instancing、Visual Basic 6.0 は関数を呼び出す前にバックグラウンドでクラスをインスタンス化します。

すべての長所と短所を持つグローバル関数/変数を生成するために悪用される可能性があります。

于 2008-10-29T12:33:55.420 に答える
3

はい、これはVisual Basic 言語の機能ですC# の using ステートメントを使用してエイリアスを作成できますが、共有クラスをスコープにインポートできるようには見えません。正直なところ、すでに使用していたレガシー プロジェクトで 1 回しか使用したことがありません。ある程度の価値はあると思いますが、コードの将来の保守性にとって、良いことよりも悪いことの方が多いのではないかと心配しています。

于 2008-10-28T16:44:10.813 に答える
2

同じライブラリを長時間使用するときはいつでも使用します。良い例は System.Math です。

C# はこれをサポートしていないため、非常に面倒です。

于 2008-10-30T06:01:32.497 に答える
1

実際、その関数は共有関数であるため使用できます。共有修飾子を削除する場合でも、それにアクセスするにはクラスのインスタンスを作成する必要があります。

デフォルトでクラス内のすべての変数とすべての関数にアクセスするには、それを継承する必要があります。

私の知る限り、クラスのインポートは基本的にクラスへの直接参照を結び付けることであり、使用するためのクラスのインスタンスを作成することではありません。

明確にするために編集:リンクにはVB固有のリンクがあり、VB.NETに関連するこの機能を説明しています。

于 2008-10-28T16:17:55.437 に答える
-4

待って、待って、待って……。

今朝、このメソッド/関数を使用して、参照が必要なクラス内のすべてのオブジェクト (クラス) を派生できることを発見しました。

Protected Overrides Sub Finalize()
    MyBase.Finalize()
End Sub
于 2011-04-18T02:08:14.677 に答える