2012-04-04 15 views
0

In File1私は3つの文字列でクラスを作成しました。私は公共のarraylistと別のクラスを作成しました。私はこのarraylistを動的にして、それに含まれるオブジェクトが3つの文字列を持つクラスであることを望みます。 ファイル内のクラスのメンバーにアクセスできますが、別のファイルにはアクセスできません。arraylistを公開するにはどうすればいいですか

file1の

public class SensorCollection 
    { 
     public string ipAddress; 
     public string portNumber; 
     public string physicalLocation; 

     public DetectorCollection(string ipAddr, string portNum, string loc) 
     { 
      this.ipAddress = ipAddr; 
      this.portNumber = portNum; 
      this.physicalLocation = loc; 

     } 
    } 
    public class SensorCollectionArray 
    { 
     public System.Collections.ArrayList SensorArrayList; 
    } 

... 
System.Collections.ArrayList DetectorArrayList = new System.Collections.ArrayList(); 
... 
    DetectorArrayList.Add(new DetectorCollection(ipAddress, portNum, str)); 

だから私はクラスの配列を埋めることができますが、別のファイルにアクセスできません。 ファイル2

AdvancedSettingsForm.SensorCollectionArray mainDetectorCollectionArray; 
    System.Collections.ArrayList arrList; 
+3

コードをコンパイルできません。あなたのコンストラクタは 'DetectorCollection'ですが、あなたのクラスは' SensorCollection'です。 –

+0

ファイルは同じ名前空間にありますか? –

+2

あなたは.net 1.xにいるのですか、なぜ 'List 'の代わりに 'ArrayList'を使用していますか? – CodesInChaos

答えて

2

あなたはこのようなSensorCollectionArrayを作成する場合:

mySCA.SensorArrayList.Add(mySensorCollection); 

SensorCollectionArray mySCA = new SensorCollectionArray(); 

は、その後、あなたはそれが(例えば、アイテムを追加するには)このようなArrayListのだアクセスすることができますただし、送信したコードでは、SensorCollectionArrayのコンストラクタは含まれていないため、インスタンス化後にSensorArrayListはnullになります。したがって、個別にインスタンス化されたArrayListに設定するか、またはSensorCollectionArrayクラス内でArrayListを作成することができます。

最後の注意:あなたは、あなたがしようとしてwhat're

+2

私は彼がジェネリック薬を使うことを間違いなく見なければならないと言います。 .NET 2以降を使用している場合、 'ArrayList'を使用する魅力的な理由はありません。 –

0

全くわからない厳密に型指定されたコレクションを作成する場合は、クラス(Tの)一般的なリストに見たいと思うかもしれませんが、私はそれのようなものだと仮定以下。おそらく、コレクションに格納する前に何らかのルールを適用する必要があるため、センサーのコレクションを作成することになります。

「これは良いセンサーですか?それはコレクションに追加してください!」

そうしないと、あなただけの

List<Sensor> mySensors; 

を使用することができますし、本当に本質的に同じことをやってますクラスを使用していません。それに加えて、それが実際にArrayListを使う理由はないと言われているように。 Marcがここで指摘するように、ArrayListを使用する最も魅力的な理由は、you're using .NET 1.1です。それ以外の場合は、ジェネリックListコレクションと、それがあなたのために行うすばらしいすべてのものを使用する必要があります。

//Sensor.cs 
public class Sensor 
{ 
    public string Ip{ get; set; } 
    public string Port{ get; set; } 
    public string PhysicalLocation{ get; set } 

    public Sensor(string ipAddr, string portNum, string loc) 
    { 
     Ip= ipAddr; 
     Port= portNum; 
     PhysicalLocation= loc; 
    } 
} 

//SensorCollection.cs 
public class SensorCollection 
{ 
    private List<Sensor> sensors; 

    public Sensor this[int i] 
    { 
     get { return this.sensors[i]; } 
     set { this.sensors[i] = value; } 
    } 

    public IEnumerable<Sensor> Sensors 
    { 
     get{ return this.sensors; } 
    } 

    public SensorCollection() 
    { 
     sensors = new List<Sensor>(); 
    } 

    public SensorCollection(string ip, string port, string location) : this() 
    { 
     this.sensors.Add(new Sensor(ip, port, location)); 
    } 

    public SensorCollection(Sensor sensor) : this() 
    { 
     this.sensors.Add(sensor); 
    } 

    public void AddSensor(Sensor sensor) 
    { 
     //Determine whether or not to add it 
     this.sensors.Add(sensor); 
    } 

    public void RemoveSensor(Sensor sensor) 
    { 
     if (sensors.Contains(sensor)) 
      sensors.Remove(sensor); 
    } 
} 

編集私はクラスの私の動的に作成 リスト内の各センサーのIPアドレスにアクセスするにはどうすればよい

var mySensors = new SensorCollection(); 
mySensors.AddSensor(new Sensor("1.1.1.1", "123", "Home")); 
mySensors.AddSensor(new Sensor("9.9.9.9", "123", "Work")); 

foreach(Sensor s in mySensors.Sensors) 
    Console.WriteLine(s.Ip); 

私は、彼らが同じ名前空間にいることを確認し、またはあなたが「使用」声明が含まれていること

別のファイルにクラスのメンバにアクセスするように見えることはできません作成するクラスの名前空間が含まれます。

+0

ありがとうございます。私はさまざまなセンサーを持っています。私は動的に各センサーのサブタブを作成します。私は、3つの文字列メンバー(ipaddr、portnum、loc)を保持するクラスを持っていたいと思います。これらのメンバーは、.iniファイルを使用して作成されます。メンバーは他のファイルにアクセスする必要があり、それが私がハングアップする場所です。動的に作成されたクラスリストの各センサーのipaddressにアクセスするにはどうすればよいですか? – user1313577

+0

私の以前の投稿を明確にしましょう。私は、センサークラスの動的配列が必要です。最初のファイルでは、次のように各メンバーにアクセスできました:(SensorArrayList [0] as SensorDataCollection).ipAddressしかし、別のファイルのクラスのメンバーにアクセスできないようです。 SensorArrayList [i] – user1313577

+0

私の答えを少し編集しました。それが役立つかどうかを見てください。確かに、IListを実装する独自のカスタムコレクションを作成する、またはリストを単に使用してカスタムコレクションクラスをまったく使用しないなど、特定の目標を達成するにはいくつかの方法があります。 – Jesse