هل يجب أن أحاول استخدام سلسلة const بدلاً من السلسلة حيثما كان ذلك ممكنًا؟

StackOverflow https://stackoverflow.com/questions/19846309

  •  29-07-2022
  •  | 
  •  

سؤال

النظر في هذه الأمثلة الثلاثة:

مثال

string message = "Hello world!";
throw new System.Exception(message);

مثال ب

const string message = "Hello world!";
throw new System.Exception(message);

مثال ج

throw new System.Exception("Hello world!");

هل هناك أي سبب لاستخدام واحد على الآخرين؟ على وجه التحديد ، ألا يجب أن أحاول استخدام سلسلة Const حيثما أمكن ذلك (على افتراض أن السلسلة لم يتم تعديلها أبدًا) ، وبالتالي المثال B هو الأفضل؟ ماذا يحدث في المثال ج؟

أعتقد أنني أسأل عما إذا كانت IL المنبعثة من قبل أعلاه متطابقة أو مختلفة ، وإذا كان هناك أي فرق. أدرك أن الفرق سيكون صغيرًا وربما لا يدعو للقلق ؛ أعتقد أن هذا يجعل هذا سؤالًا أكاديميًا.


يحرر. ها هي IL

IL_0014: ldstr "This is a string"
IL_0019: stloc.0
IL_001a: ldloc.0
IL_001b: newobj instance void [mscorlib]System.Exception::.ctor(string)
IL_0020: throw


IL_0033: nop
IL_0034: ldstr "This is a const string"
IL_0039: newobj instance void [mscorlib]System.Exception::.ctor(string)
IL_003e: throw

IL_0051: nop
IL_0052: ldstr "This is an inline string."
IL_0057: newobj instance void [mscorlib]System.Exception::.ctor(string)
IL_005c: throw

تبدو متطابقة بشكل جوهري بالنسبة لي.

هل كانت مفيدة؟

المحلول 2

لا يوجد فرق من حيث الأداء أو استخدام الذاكرة أو كفاءة جدول السلسلة.

التأثير الوحيد للكلمة الرئيسية const هو إنشاء خطأ في وقت الترجمة عند إعادة تعيين السلسلة. لذلك من المفيد إضافة Const لتوصيل نيتك للمطورين الآخرين.

نصائح أخرى

يعتمد على السياق ، حقا. هل ستتغير هذه الرسالة؟ إذا كنت تستخدم الخيار A ، فلديك الفرصة لتعديل قيمة رسالة السلسلة ، مع الآخرين ، تقوم بطباعة سلسلة مشفرة صلبة - وهذا أمر جيد ، إذا كان سيقول ذلك دائمًا فقط

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top