2011-10-21 25 views
0

シリアルポート経由で制御回路と通信するライブラリクラスCircuitControllerを作成しました。だからここC#メソッドとプロパティ:例外が発生する可能性があります

public class CircuitController 
{ 
    // Enumerations. 
    public enum Sensors { Sensor1, Sensor2, ..., Sensor15 }; 
    ... 

    // Fields. 
    private SerialPort serialPort; // Set in constructor. 
    private Dictionary<Sensors, Sensor> activeSensorCollection; 
    ... 

    // Properties. 
    public Dictionary<Sensors, Sensor> ActiveSensors 
    { get { return this.activeSensorCollection; } }  

    // Methods. 
    public void SetSensorUnits(Sensors sensor, String sensorUnits) 
    { 
     // Creates serial command based off parameters, sends, receives, processes. 
    } 
    ... 

    // Constructors. 
    public CircuitController(...) 
    { 
     ... // Set CircuitController fields including nested classes. 
     Sensor sensor1 = new Sensor(a,b,c,d,this); // Link sensor to this controller instance. 
     ... // Add sensors to dictionary. 
    }   

    // Nested Classes. 
    public class Sensor 
    { 
     // Fields. 
     private CircuitController controller; 
     private String units; 
     private Sensors sensorNumber; 
     ... 

     // Properties. 
     public String Units 
     { 
     get 
     { 
      return this.controller.GetSensorUnits(this.sensorNumber); 
     } 
     set 
     { 
      this.controller.SetSensorUnits(this.sensorNumber, value); 
      } 
     } 
     ... 
    } 

は私の質問です:それは、ユーザーが/取得(例えばシリアル通信エラー)例外がスローされていてもプロパティを使用してセンサーの設定を設定することができるようにOKですか?

String sensor2Units = circuitControllerInstance.ActiveSensors[Sensor2].Units' 
circuitControllerInstance.ActiveSensors[Sensor1].Units = "mm"; 

私はこれがより明確...より

String sensor2Units = circuitControllerInstance.GetSensorUnits(Sensors.Sensor2); 
circuitControllerInstance.SetSensorUnits(Sensors.Sensor1, "mm"); 

が、これらは単純化された例が取得/設定方法のいくつかが面倒になり、最大5つのパラメータにを持っている、あることに注意してください見つける繰り返し入力してください。 :/

答えて

6

プロパティが設定されている場合、私は実際にすることは何もしません。代わりにすべてのプロパティをメモリに設定してから、プロパティをシリアルデバイスに「保存」する「保存」メソッドを追加します。

+0

私は同意します。それが行く方法です。 –

+0

ありがとうございました。 – john

0

オブジェクトの状態にかかわらず、例外の危険性を調べることができるものには読み取り専用のプロパティを優先する傾向があります。オブジェクトの状態に関係なく検査または設定できるものの読み書きプロパティ(つまり、有効な値のセットはオブジェクトの状態に依存すべきではありません)、他のもののためのgetter/setterメソッドです。 1つの読み取り/書き込みプロパティを設定すると、他の読み取り専用プロパティの値に影響する可能性がありますが、他の読み取り/書き込みプロパティの値には影響しません。

関数の多くの属性を一度に設定する必要がある場合は、オブジェクトの状態を構造体にコピーし、構造体からオブジェクトの状態を読み取るメソッドのペアを持つと便利です。

 
struct MyPropertyStruct 
{ 
    Rectangle bounds; 
    ... 
} 
... 
    MyPropertyStruct myProperties; 

    someObject.GetProperties(ref myProperties); 
    myProperties.Bounds.Left += 4; 

SomeObjectのには影響しませんが、単にない限り、あるいはまでmyPropertiesに格納されたプロパティのコピーに影響します。一部の人々は次のようなコードであるため、そのような目的のために構造体を使用する邪悪なことだと思うように見えます1つは "someObject.SetProperties(ref myProperties)"です。私は逆をお勧めします:myPropertiesが値型または不変の参照型のみを含む構造体である場合、有能なプログラマーは、定義上、値型が他のものに束縛されていないことを知ります。対照的に、GetPropertiesがクラス型を返す場合、コードを見ているプログラマは、返されたオブジェクトを変更した場合の影響を知る方法がありません。

関連する問題