C# متى تنتهي عبارة الاستخدام والتنظيف


هذه ليست مشكلة مجرد سؤال حول عبارة الاستخدام.
إذا كان لدي مثل هذا الروتين.

public static int UpdateSeries(int mazeSeriesID)
		{
			Gbl.z_MethodMain = "(Common)UpdateShows";

			using SqliteDBContext dbContext = new();

have some code which updates or creates sqlite records then executes a save changes block as follows.

}

public static bool SaveEntityChanges(string label = "")
		{
			Gbl.z_MethodMain = "(Common)SaveEntityChanges";
			bool result = true;

			try
			{
				DbContext.SaveChanges();
			} catch(Exception ex)
			{
				Utils.WriteLog(
					Gbl.z_MsgLogName,
					1,
					"Error occurred while Saving Changes to Database - Exception= " + ex.Message,
					Gbl.z_MethodMain,
					label);
				result = false;
			}
			return result;
		}

هل يستمر بيان الاستخدام خلال روتين حفظ التغييرات الذي تم تنفيذه؟
هل يستمر على الإجراءات الأخرى التي يتم تنفيذها من داخل الكتلة؟
هل سينتهي الاستخدام فقط عند العودة؟
ما الفرق إذا وضعت كل الكود بين قوسين؟

أنا جديد على هذا كل ما في doco لا يوضح ذلك.

ما حاولت:

لقد حاولت حاليًا القيام بذلك فقط داخل الكتلة.

الحل 1

الحل 2

هناك نوعان مختلفان من using*

ال using statement الذي يتطلب قوسين:

ج #
using (MyClass mc = new MyClass())
   {
   // mc in scope here
   ...
   }
// mc no longer in scope

سيقوم النظام تلقائيًا باستدعاء Dispose للمتغير عند الخروج من كتلة التعليمات البرمجية بأي طريقة: Fall Through، Exception، break, continue, throw، أو return.

ال using declaration:

ج #
   {
   ...
   using MyClass mc = new MyClass();
   // mc in scope here
   ...
   }
// mc out of scope here

سيتم التخلص من المتغير عندما يخرج الكود من النطاق الذي تم الإعلان عن المتغير فيه (عادةً ما يتضمن أقواسًا متعرجة) بنفس الطريقة كما هو الحال مع using statement.

* حسنا، ثلاثة – هناك أيضا using directive التي تظهر في الجزء العلوي من الملف وتقوم بإنشاء أسماء مستعارة.

コメント

タイトルとURLをコピーしました