簡體   English   中英

在類中正確使用自定義變量類型(結構)

[英]Properly using a custom variable type (struct) in class

我正在嘗試通過正在嘗試實施的新課程來思考,並不確定自己是好是壞。 我想創建一個包含設備設置(例如英寸與公制)以及對應於設置的代碼的類。 我認為最好有這樣的代碼:

Device myDevice = new Device();
myDevice.units = Device.Inches;
myDevice.MoveTo(1,2,3, Device.Rapid);

設備類文件將是:

class Device
{
    public static DeviceUnit Inches = DeviceUnit("G21");
    public static DeviceUnit Metric = DeviceUnit("G20");

    public static DeviceMovement Rapid = DeviceMovement("G00");
    public static DeviceMovement Feed = DeviceMovement("G01");

    public DeviceUnit units;
    public Device()
    {
        // Default to metric system
        units = Device.Metric;
    }
    public Device(DeviceUnit customUnit)
    {
        units = customUnit;
    }

    public MoveTo(float x, float y, float z, DeviceMovement movement)
    {
        string command = string.Format($"{units.gcode} {movement.gcode} ");
        command += string.Format($"X{x} Y{y} Z{z}\r\n");
        Debug.Write(command);
    }
}

設備單元結構:

public struct DeviceUnit
{
    public string gcode;
    public DeviceUnit(string code)
    {
        gcode = code;
    }
}

DeviceMovement結構:

public struct DeviceMovement 
{
    public string gcode;
    public DeviceUnit(string code)
    {
        gcode = code;
    }
}

我擔心的是,我最終可能會在使用的結構數量上被“過度殺傷”。 我已經在考慮應該另外存儲增量(G90)與絕對(G91)定位。 我想使其具有靈活性,以便將來可以從XML配置文件中加載gcode字符串,以便為新的計算機配置快速創建新的XML文件。

使用多個結構對於此任務而言是否過於矯kill過正?
我應該以某種方式將結構結合在一起嗎?

如果結構具有表示復雜對象的多個屬性,則該結構具有含義。

我發現您的結構DeviceUnit,DeviceMovement只是字符串類型的一個屬性,那么為什么是struct?

讓DeviceUnit,DeviceMovement字符串屬性。 可是等等 :)

Q: Is using multiple structs too overkill for this task?

答:不可以,如果Struct用於描述具有許多屬性的對象(可能是復雜的設備屬性),則它並不是多余的。

例:

  public struct Dimension
 {
   //avoid using constructor. You can initialize with object initializer
  public int x;
  public int y;
  public int z;  
}

例如:Windows的所有設備都存儲在WMI類中,例如Win32_Printer WMI,它具有40多個屬性,並且大多數屬性是一個復雜的對象。

q: Should I combine the structs together somehow?

答:您只需定義一個名為Device的類,它具有屬性和方法。 如果屬性之一是復雜對象,則其類型應為struct或class。 您為設備構建對象模型 ,因此請仔細選擇屬性的類型。 但是在您的代碼中,實際上您根本不需要該結構,請使用簡單的屬性,例如:

 public static string Inches {get;set;} = "G21"; // in c#6 you can initialize properties

我的問題:為什么選擇靜態屬性?

我的問題:為什么用默認值初始化屬性。

答:您可以為每個設備創建xml文件並在對象實例化期間加載它,這為您提供了更多功能:

使用一個或多個專業類表示您的設備您可以將以下方法添加到您的設備類中:

 public LoadDevice(string xmlFilename)
  {
     // read xml file , e.g Linq to xml 
     // set properties
  }

Here your ceiling is the sky :)

順便說一句,如果結構具有構造函數,則應使用new關鍵字。 因此應該:

public static DeviceUnit Inches = new  DeviceUnit("G21");  //:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM