0

ASP.net/VB.netでWebサービスを作成するのは初めてです。App_CodeフォルダーのService.vb内に次のようなパブリック変数を設定しています。

Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Diagnostics
Imports System.Web.Script.Services

<System.Web.Script.Services.ScriptService()> _
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Service
    Inherits System.Web.Services.WebService

    Public avIP As String = "0.0.0.0"
etc etc....

そして今、私は別のクラスを作成し、 avIPの値を取得したいと思います。しかし、私がこれを行うとき:

Client.Connect(Service.avIP, 60128)

それは私にその値をエラーとして与えるだけではありません。サービスを行っても価値がないようです。提案のリストには何も表示されません。

Service.vbから他のクラスに値を取得するにはどうすればよいですか?

アップデート

Service.vbファイルに次のものがあります。

<System.Web.Script.Services.ScriptService()> _
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Service
    Inherits System.Web.Services.WebService
    Public svc As Service = New Service
    Dim avIp As String = "0.0.0.0"

そしてavReceiver.vbで私は持っています:

Client.Connect(svc.avIP, 60128)
4

1 に答える 1

1

あなたのようなクラスで宣言されたパブリック変数を参照するには、そのクラスのインスタンスを作成する必要があります。
これは、クラスの作成されたすべてのインスタンスに変数のコピーがあることを意味します。
これは、すべてのオブジェクト指向言語の非常に基本的な機能です。

' Create a new instance of the Service class
Dim svc As Service = new Service()
' Set the value of a Public Property 
svc.avIP = "192.168.1.0"
' Use the instance value of that property
Client.Connect(svc.avIP, 60129)

' Create another instance of the Service class
Dim svc1 As Service = new Service()
' Set the value of a Public Property 
svc1.avIP = "192.168.1.1"
' Use the instance value of that property
Client.Connect(svc1.avIP, 60129)

クラスのインスタンスを宣言せずにクラスのプロパティ メンバーを使用する場合は、そのメンバーをShared(C# では静的) として宣言する必要があります。
これは、そのクラスのすべてのインスタンスが同じ変数 (およびもちろんその値) を共有することを意味します。

Public Class Service   
     Inherits System.Web.Services.WebService   

     Public Shared avIP As String = "0.0.0.0"   
     ....
End Class

' Set the one and only avIP for every instance
Service.avIP = "192.168.1.0"
' Use directly the value
Client.Connect(Service.avIP, 60129)

' Create an instance of the Service class
Dim svc As Service = new Service()
' Pass the same value used directly with the class name (192.168.1.0)
Client.Connect(svc.avIP, 60129)
于 2012-10-06T21:48:10.340 に答える