سؤال

هل هناك أي preprocessor الرموز التي تسمح شيء مثل

#if CLR_AT_LEAST_3.5
// use ReaderWriterLockSlim
#else
// use ReaderWriterLock
#endif

أو طريقة أخرى للقيام بذلك ؟

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

المحلول

أنا لا أعتقد أن هناك أي محددة مسبقا 'preprocessor' الرموز.ومع ذلك يمكنك تحقيق ما تريد مثل هذا:

  1. إنشاء تكوينات مختلفة من المشروع الخاص بك ، واحد عن كل نسخة من CLR كنت ترغب في تقديم الدعم.

  2. اختر رمز مثل VERSION2, VERSION3 الخ.في CLR الإصدار.

  3. في كل التكوين ، تحديد رمز واحد المرتبطة به ، undefine جميع الآخرين.

  4. استخدام هذه الرموز في الشرطية كتل.

نصائح أخرى

ليست هناك أي بني، ولكن هل يمكن أن العرض الخاصة بك.

لهذا السيناريو معينة، قد ترغب في تغليف المنطق في (على سبيل المثال) مجمع (قفل) فئة، بحيث لم يكن لديك #if المنتشرة عبر كافة التعليمات البرمجية. بالطبع، إذا كنت تفعل سوى القليل من تأمين قد لا يكون يستحق عناء.

وأنا استخدم تكوينات و / أو مشاريع مختلفة لبناء لمجموعة متنوعة من المنصات - أي protobuf- يبني شبكة ل. NET 2.0 Framework 3.0، أحادية، CF 2.0، CF 3.5 باستخدام هذه الحيلة. رمز و#if كتل بناء على رموز مختلفة للسيطرة على المنطق - لذلك، على سبيل المثال، BinaryFormatter غير متوفر على CF، WCF لا تتوفر إلا مع Framework 3.0، Delegate.CreateDelegate ليس على CF 2.0، الخ

هل يمكن استخدام انعكاس للتحقق حيوي ما إذا كان نوع معين مثل ReaderWriterLockSlim يتوفر (بدلا من استخدام المعالج).

وهذا من شأنه أن تعطيك ميزة أنه يمكنك نشر نسخة واحدة من المنتج الخاص بك والمستخدمين وجود (أو تحديث ل) الصافي 3.5 ستستفيد من رمز الأمثل.

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