I am trying to create a class, and I am having problems accessing some nested fields, and I have some problems with how multi-threaded the safe is in general. I would like to know if anyone has a better idea of how this should be designed or any changes that should be made?
using System; using System.Collections; namespace SystemClass { public class Program { static void Main(string[] args) { System system = new System(); //Seems like an awkward way to access all the members dynamic deviceInstance = (((DeviceType)((DeviceGroup)system.deviceGroups[0]).deviceTypes[0]).deviceInstances[0]); Boolean checkLocked = deviceInstance.locked; //Seems like this method for accessing fields might have problems with multithreading foreach (DeviceGroup dg in system.deviceGroups) { foreach (DeviceType dt in dg.deviceTypes) { foreach (dynamic di in dt.deviceInstances) { checkLocked = di.locked; } } } } } public class System { public ArrayList deviceGroups = new ArrayList(); public System() { //API called to get names of all the DeviceGroups deviceGroups.Add(new DeviceGroup("Motherboard")); } } public class DeviceGroup { public ArrayList deviceTypes = new ArrayList(); public DeviceGroup() {} public DeviceGroup(string deviceGroupName) { //API called to get names of all the Devicetypes deviceTypes.Add(new DeviceType("Keyboard")); deviceTypes.Add(new DeviceType("Mouse")); } } public class DeviceType { public ArrayList deviceInstances = new ArrayList(); public bool deviceConnected; public DeviceType() {} public DeviceType(string DeviceType) { //API called to get hardwareIDs of all the device instances deviceInstances.Add(new Mouse("0001")); deviceInstances.Add(new Keyboard("0003")); deviceInstances.Add(new Keyboard("0004")); //Start thread CheckConnection that updates deviceConnected periodically } public void CheckConnection() { //API call to check connection and returns true this.deviceConnected = true; } } public class Keyboard { public string hardwareAddress; public bool keypress; public bool deviceConnected; public Keyboard() {} public Keyboard(string hardwareAddress) { this.hardwareAddress = hardwareAddress; //Start thread to update deviceConnected periodically } public void CheckKeyPress() { //if API returns true this.keypress = true; } } public class Mouse { public string hardwareAddress; public bool click; public Mouse() {} public Mouse(string hardwareAddress) { this.hardwareAddress = hardwareAddress; } public void CheckClick() { //if API returns true this.click = true; } }
}
Making a class thread safe is a hell of a challenge.
, , , , - , , , . , , , , , .
, , , , , , , , .
?
. , , , . , .
, . , "", -.
( ), , , , , . , , , .
, , , . , , , .
, , , , " ". . , , , .
, , , , , ..
Source: https://habr.com/ru/post/1745226/More articles:How to return ancestors of an object with LINQ? - c #WPF cascading combo - c #How to change the color of the blinking cursor? - javaActive Directory Membership Provider - How Can I Extend It? - asp.net-mvcКакая связь между user_access и hook_perm в drupal? - phphow to subtract a circle from an arbitrary polygon - mathhow to convert hierarchical database data to XML using ASP.net 3.5 and LINQ - c #Get the start and end index of the selected fragment in the desired field - .netCakePHP hasMany Multi-Column Relationships - cakephpObject sent -autorelease too many times - objective-cAll Articles