From 770e9488fad76cdf987e6992f84ff4064b5afcfb Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期五, 13 三月 2026 13:28:54 +0800
Subject: [PATCH] fix: address code quality issues in I/Q/T/C regions

---
 Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/MemoryRegion.cs |    9 +++
 Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/IRegion.cs      |   28 ---------
 Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/TRegion.cs      |   53 +++++++++--------
 Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/QRegion.cs      |   28 ---------
 Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/CRegion.cs      |   53 +++++++++--------
 5 files changed, 63 insertions(+), 108 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/CRegion.cs b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/CRegion.cs
index f5a7b62..b0aa20f 100644
--- a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/CRegion.cs
+++ b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/CRegion.cs
@@ -11,11 +11,6 @@
     public class CRegion : MemoryRegion, IMemoryRegion
     {
         /// <summary>
-        /// 鏍囪瘑瀵硅薄鏄惁宸茶閲婃斁
-        /// </summary>
-        private bool _disposed = false;
-
-        /// <summary>
         /// 鍖哄煙绫诲瀷
         /// </summary>
         public override string RegionType => "C";
@@ -26,11 +21,24 @@
         private const int CounterSize = 2;
 
         /// <summary>
+        /// 璁℃暟鍣ㄦ暟閲�
+        /// </summary>
+        public int CounterCount => Size / CounterSize;
+
+        /// <summary>
         /// 鏋勯�犲嚱鏁�
         /// </summary>
         /// <param name="counterCount">璁℃暟鍣ㄦ暟閲�</param>
+        /// <exception cref="ArgumentOutOfRangeException">褰揷ounterCount灏忎簬鎴栫瓑浜�0鏃舵姏鍑�</exception>
+        /// <exception cref="OverflowException">褰揷ounterCount * CounterSize瓒呭嚭int鑼冨洿鏃舵姏鍑�</exception>
         public CRegion(int counterCount) : base(counterCount * CounterSize)
         {
+            if (counterCount <= 0)
+                throw new ArgumentOutOfRangeException(nameof(counterCount), "璁℃暟鍣ㄦ暟閲忓繀椤诲ぇ浜�0");
+
+            // 楠岃瘉娌℃湁婧㈠嚭
+            if (counterCount > Size / CounterSize)
+                throw new OverflowException($"璁℃暟鍣ㄦ暟閲弡counterCount}杩囧ぇ锛岃秴鍑哄唴瀛橀檺鍒�");
         }
 
         /// <summary>
@@ -38,10 +46,15 @@
         /// </summary>
         /// <param name="counterNumber">璁℃暟鍣ㄥ彿锛堜粠1寮�濮嬶級</param>
         /// <returns>璁℃暟鍣ㄥ��</returns>
+        /// <exception cref="ArgumentOutOfRangeException">褰揷ounterNumber涓�0鎴栬秴鍑鸿鏁板櫒鏁伴噺鏃舵姏鍑�</exception>
         public ushort ReadCounter(ushort counterNumber)
         {
-            if (_disposed)
-                throw new ObjectDisposedException(nameof(CRegion));
+            if (counterNumber == 0)
+                throw new ArgumentOutOfRangeException(nameof(counterNumber), "璁℃暟鍣ㄥ彿蹇呴』澶т簬0锛堜粠1寮�濮嬶級");
+
+            if (counterNumber > CounterCount)
+                throw new ArgumentOutOfRangeException(nameof(counterNumber),
+                    $"璁℃暟鍣ㄥ彿{counterNumber}瓒呭嚭鑼冨洿锛屽綋鍓嶈鏁板櫒鎬绘暟涓簕CounterCount}");
 
             ushort offset = (ushort)((counterNumber - 1) * CounterSize);
             var data = Read(offset, CounterSize);
@@ -53,31 +66,19 @@
         /// </summary>
         /// <param name="counterNumber">璁℃暟鍣ㄥ彿锛堜粠1寮�濮嬶級</param>
         /// <param name="value">璁℃暟鍣ㄥ��</param>
+        /// <exception cref="ArgumentOutOfRangeException">褰揷ounterNumber涓�0鎴栬秴鍑鸿鏁板櫒鏁伴噺鏃舵姏鍑�</exception>
         public void WriteCounter(ushort counterNumber, ushort value)
         {
-            if (_disposed)
-                throw new ObjectDisposedException(nameof(CRegion));
+            if (counterNumber == 0)
+                throw new ArgumentOutOfRangeException(nameof(counterNumber), "璁℃暟鍣ㄥ彿蹇呴』澶т簬0锛堜粠1寮�濮嬶級");
+
+            if (counterNumber > CounterCount)
+                throw new ArgumentOutOfRangeException(nameof(counterNumber),
+                    $"璁℃暟鍣ㄥ彿{counterNumber}瓒呭嚭鑼冨洿锛屽綋鍓嶈鏁板櫒鎬绘暟涓簕CounterCount}");
 
             ushort offset = (ushort)((counterNumber - 1) * CounterSize);
             var data = new byte[] { (byte)(value >> 8), (byte)(value & 0xFF) };
             Write(offset, data);
-        }
-
-        /// <summary>
-        /// 閲婃斁璧勬簮
-        /// </summary>
-        /// <param name="disposing">鏄惁姝e湪閲婃斁鎵樼璧勬簮</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (!_disposed)
-            {
-                if (disposing)
-                {
-                    // 閲婃斁鎵樼璧勬簮
-                }
-                _disposed = true;
-            }
-            base.Dispose(disposing);
         }
     }
 }
diff --git a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/IRegion.cs b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/IRegion.cs
index b82a8f3..c1c1629 100644
--- a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/IRegion.cs
+++ b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/IRegion.cs
@@ -10,11 +10,6 @@
     public class IRegion : MemoryRegion, IMemoryRegion
     {
         /// <summary>
-        /// 鏍囪瘑瀵硅薄鏄惁宸茶閲婃斁
-        /// </summary>
-        private bool _disposed = false;
-
-        /// <summary>
         /// 鍖哄煙绫诲瀷
         /// </summary>
         public override string RegionType => "I";
@@ -35,9 +30,6 @@
         /// <returns>浣嶇姸鎬侊紙true/false锛�</returns>
         public bool ReadBit(ushort byteOffset, byte bitOffset)
         {
-            if (_disposed)
-                throw new ObjectDisposedException(nameof(IRegion));
-
             if (bitOffset > 7)
                 throw new ArgumentOutOfRangeException(nameof(bitOffset), "浣嶅亸绉诲繀椤诲湪0-7涔嬮棿");
 
@@ -63,9 +55,6 @@
         /// <param name="value">浣嶅�硷紙true/false锛�</param>
         public void WriteBit(ushort byteOffset, byte bitOffset, bool value)
         {
-            if (_disposed)
-                throw new ObjectDisposedException(nameof(IRegion));
-
             if (bitOffset > 7)
                 throw new ArgumentOutOfRangeException(nameof(bitOffset), "浣嶅亸绉诲繀椤诲湪0-7涔嬮棿");
 
@@ -84,23 +73,6 @@
             {
                 _lock.ExitWriteLock();
             }
-        }
-
-        /// <summary>
-        /// 閲婃斁璧勬簮
-        /// </summary>
-        /// <param name="disposing">鏄惁姝e湪閲婃斁鎵樼璧勬簮</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (!_disposed)
-            {
-                if (disposing)
-                {
-                    // 閲婃斁鎵樼璧勬簮
-                }
-                _disposed = true;
-            }
-            base.Dispose(disposing);
         }
     }
 }
diff --git a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/MemoryRegion.cs b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/MemoryRegion.cs
index 6ebd64c..b50ca96 100644
--- a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/MemoryRegion.cs
+++ b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/MemoryRegion.cs
@@ -49,6 +49,9 @@
         /// </summary>
         public virtual byte[] Read(ushort offset, ushort length)
         {
+            if (_disposed)
+                throw new ObjectDisposedException(nameof(MemoryRegion));
+
             _lock.EnterReadLock();
             try
             {
@@ -71,6 +74,9 @@
         /// </summary>
         public virtual void Write(ushort offset, byte[] data)
         {
+            if (_disposed)
+                throw new ObjectDisposedException(nameof(MemoryRegion));
+
             if (data == null)
                 throw new ArgumentNullException(nameof(data));
 
@@ -94,6 +100,9 @@
         /// </summary>
         public virtual void Clear()
         {
+            if (_disposed)
+                throw new ObjectDisposedException(nameof(MemoryRegion));
+
             _lock.EnterWriteLock();
             try
             {
diff --git a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/QRegion.cs b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/QRegion.cs
index 9760a0c..0a77164 100644
--- a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/QRegion.cs
+++ b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/QRegion.cs
@@ -10,11 +10,6 @@
     public class QRegion : MemoryRegion, IMemoryRegion
     {
         /// <summary>
-        /// 鏍囪瘑瀵硅薄鏄惁宸茶閲婃斁
-        /// </summary>
-        private bool _disposed = false;
-
-        /// <summary>
         /// 鍖哄煙绫诲瀷
         /// </summary>
         public override string RegionType => "Q";
@@ -35,9 +30,6 @@
         /// <returns>浣嶇姸鎬侊紙true/false锛�</returns>
         public bool ReadBit(ushort byteOffset, byte bitOffset)
         {
-            if (_disposed)
-                throw new ObjectDisposedException(nameof(QRegion));
-
             if (bitOffset > 7)
                 throw new ArgumentOutOfRangeException(nameof(bitOffset), "浣嶅亸绉诲繀椤诲湪0-7涔嬮棿");
 
@@ -63,9 +55,6 @@
         /// <param name="value">浣嶅�硷紙true/false锛�</param>
         public void WriteBit(ushort byteOffset, byte bitOffset, bool value)
         {
-            if (_disposed)
-                throw new ObjectDisposedException(nameof(QRegion));
-
             if (bitOffset > 7)
                 throw new ArgumentOutOfRangeException(nameof(bitOffset), "浣嶅亸绉诲繀椤诲湪0-7涔嬮棿");
 
@@ -84,23 +73,6 @@
             {
                 _lock.ExitWriteLock();
             }
-        }
-
-        /// <summary>
-        /// 閲婃斁璧勬簮
-        /// </summary>
-        /// <param name="disposing">鏄惁姝e湪閲婃斁鎵樼璧勬簮</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (!_disposed)
-            {
-                if (disposing)
-                {
-                    // 閲婃斁鎵樼璧勬簮
-                }
-                _disposed = true;
-            }
-            base.Dispose(disposing);
         }
     }
 }
diff --git a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/TRegion.cs b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/TRegion.cs
index a406bef..87b670c 100644
--- a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/TRegion.cs
+++ b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/TRegion.cs
@@ -11,11 +11,6 @@
     public class TRegion : MemoryRegion, IMemoryRegion
     {
         /// <summary>
-        /// 鏍囪瘑瀵硅薄鏄惁宸茶閲婃斁
-        /// </summary>
-        private bool _disposed = false;
-
-        /// <summary>
         /// 鍖哄煙绫诲瀷
         /// </summary>
         public override string RegionType => "T";
@@ -26,11 +21,24 @@
         private const int TimerSize = 2;
 
         /// <summary>
+        /// 瀹氭椂鍣ㄦ暟閲�
+        /// </summary>
+        public int TimerCount => Size / TimerSize;
+
+        /// <summary>
         /// 鏋勯�犲嚱鏁�
         /// </summary>
         /// <param name="timerCount">瀹氭椂鍣ㄦ暟閲�</param>
+        /// <exception cref="ArgumentOutOfRangeException">褰搕imerCount灏忎簬鎴栫瓑浜�0鏃舵姏鍑�</exception>
+        /// <exception cref="OverflowException">褰搕imerCount * TimerSize瓒呭嚭int鑼冨洿鏃舵姏鍑�</exception>
         public TRegion(int timerCount) : base(timerCount * TimerSize)
         {
+            if (timerCount <= 0)
+                throw new ArgumentOutOfRangeException(nameof(timerCount), "瀹氭椂鍣ㄦ暟閲忓繀椤诲ぇ浜�0");
+
+            // 楠岃瘉娌℃湁婧㈠嚭
+            if (timerCount > Size / TimerSize)
+                throw new OverflowException($"瀹氭椂鍣ㄦ暟閲弡timerCount}杩囧ぇ锛岃秴鍑哄唴瀛橀檺鍒�");
         }
 
         /// <summary>
@@ -38,10 +46,15 @@
         /// </summary>
         /// <param name="timerNumber">瀹氭椂鍣ㄥ彿锛堜粠1寮�濮嬶級</param>
         /// <returns>瀹氭椂鍣ㄥ�硷紙姣锛�</returns>
+        /// <exception cref="ArgumentOutOfRangeException">褰搕imerNumber涓�0鎴栬秴鍑哄畾鏃跺櫒鏁伴噺鏃舵姏鍑�</exception>
         public ushort ReadTimer(ushort timerNumber)
         {
-            if (_disposed)
-                throw new ObjectDisposedException(nameof(TRegion));
+            if (timerNumber == 0)
+                throw new ArgumentOutOfRangeException(nameof(timerNumber), "瀹氭椂鍣ㄥ彿蹇呴』澶т簬0锛堜粠1寮�濮嬶級");
+
+            if (timerNumber > TimerCount)
+                throw new ArgumentOutOfRangeException(nameof(timerNumber),
+                    $"瀹氭椂鍣ㄥ彿{timerNumber}瓒呭嚭鑼冨洿锛屽綋鍓嶅畾鏃跺櫒鎬绘暟涓簕TimerCount}");
 
             ushort offset = (ushort)((timerNumber - 1) * TimerSize);
             var data = Read(offset, TimerSize);
@@ -53,31 +66,19 @@
         /// </summary>
         /// <param name="timerNumber">瀹氭椂鍣ㄥ彿锛堜粠1寮�濮嬶級</param>
         /// <param name="value">瀹氭椂鍣ㄥ�硷紙姣锛�</param>
+        /// <exception cref="ArgumentOutOfRangeException">褰搕imerNumber涓�0鎴栬秴鍑哄畾鏃跺櫒鏁伴噺鏃舵姏鍑�</exception>
         public void WriteTimer(ushort timerNumber, ushort value)
         {
-            if (_disposed)
-                throw new ObjectDisposedException(nameof(TRegion));
+            if (timerNumber == 0)
+                throw new ArgumentOutOfRangeException(nameof(timerNumber), "瀹氭椂鍣ㄥ彿蹇呴』澶т簬0锛堜粠1寮�濮嬶級");
+
+            if (timerNumber > TimerCount)
+                throw new ArgumentOutOfRangeException(nameof(timerNumber),
+                    $"瀹氭椂鍣ㄥ彿{timerNumber}瓒呭嚭鑼冨洿锛屽綋鍓嶅畾鏃跺櫒鎬绘暟涓簕TimerCount}");
 
             ushort offset = (ushort)((timerNumber - 1) * TimerSize);
             var data = new byte[] { (byte)(value >> 8), (byte)(value & 0xFF) };
             Write(offset, data);
-        }
-
-        /// <summary>
-        /// 閲婃斁璧勬簮
-        /// </summary>
-        /// <param name="disposing">鏄惁姝e湪閲婃斁鎵樼璧勬簮</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (!_disposed)
-            {
-                if (disposing)
-                {
-                    // 閲婃斁鎵樼璧勬簮
-                }
-                _disposed = true;
-            }
-            base.Dispose(disposing);
         }
     }
 }

--
Gitblit v1.9.3