আমি নীচে কিন্তু সি ++ এর পরিবর্তে সি # তে করতে চাই
#ifdef _DEBUG
bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging
#else
bool bypassCheck = false; //NEVER bypass it
#endif
আমি নীচে কিন্তু সি ++ এর পরিবর্তে সি # তে করতে চাই
#ifdef _DEBUG
bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging
#else
bool bypassCheck = false; //NEVER bypass it
#endif
উত্তর:
আমি আপনাকে শর্তসাপেক্ষ বৈশিষ্ট্যটি ব্যবহার করে সুপারিশ করব !
আপডেট: 3.5 বছর পরে
আপনি এটির#if মতো ব্যবহার করতে পারেন ( উদাহরণটি এমএসডিএন থেকে অনুলিপি করা ):
// preprocessor_if.cs
#define DEBUG
#define VC_V7
using System;
public class MyClass
{
static void Main()
{
#if (DEBUG && !VC_V7)
Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && VC_V7)
Console.WriteLine("VC_V7 is defined");
#elif (DEBUG && VC_V7)
Console.WriteLine("DEBUG and VC_V7 are defined");
#else
Console.WriteLine("DEBUG and VC_V7 are not defined");
#endif
}
}
শুধুমাত্র পদ্ধতির অংশগুলি বাদ দেওয়ার জন্য দরকারী।
আপনি যদি #ifসংকলন থেকে কিছু পদ্ধতি বাদ দিতে চান তবে আপনাকে সেই সমস্ত কোডের টুকরোটি সংকলন থেকে বাদ দিতে হবে যা সেই পদ্ধতিটিকেও কল করে (কখনও কখনও আপনি রানটাইমের সময় কিছু ক্লাস লোড করতে পারেন এবং "সমস্ত রেফারেন্সগুলি সন্ধান করুন" সহ কলার খুঁজে পাবেন না)। অন্যথায় ত্রুটি হবে।
আপনি যদি অন্যদিকে শর্তসাপেক্ষ সংকলন ব্যবহার করেন তবে আপনি এখনও কোডের সমস্ত টুকরো ছেড়ে দিতে পারেন যা পদ্ধতিটিকে কল করে। সমস্ত পরামিতি এখনও সংকলক দ্বারা বৈধ করা হবে। রানটাইমটিতে কেবল পদ্ধতিটি কল করা হবে না । আমি মনে করি যে পদ্ধতিটি একবারে আড়াল করা আরও ভাল এবং সেই সাথে যে কোডটি কল করে সেগুলিও সরাতে হবে না। আপনাকে যে পদ্ধতিগুলি মান দেয় কেবলমাত্র শূন্য পদ্ধতিতে শর্তযুক্ত বৈশিষ্ট্য ব্যবহার করার অনুমতি নেই। তবে আমি এটি একটি বড় সীমাবদ্ধতা বলে মনে করি না কারণ আপনি যদি #ifএমন কোনও পদ্ধতি ব্যবহার করেন যা কোনও মূল্য ফেরত দেয় তবে আপনাকে কোডের সমস্ত টুকরোগুলি লুকিয়ে রাখতে হবে।
এখানে একটি উদাহরণ:
// কলিং ক্লাস 1. শর্তসাপেক্ষে মেথড () রানটাইম এড়ানো হবে
// যতক্ষণ না DEBUG ধ্রুবক সংজ্ঞায়িত করা হয়
System.Diagnostics ব্যবহার করে;
ক্লাস ক্লাস 1
{
[শর্তসাপেক্ষ ( "ডিবাগ")]
পাবলিক স্ট্যাটিক শূন্য শর্তসাপেক্ষে মেঠোড () {
কনসোল.ওরাইটলাইন ("এক্সিকিউটেড ক্লাস 1।কন্ডিশনাল ম্যাথোদ");
}
}
সারসংক্ষেপ:
আমি #ifdefসি ++ এ ব্যবহার করব তবে সি # / ভিবি দিয়ে আমি শর্তযুক্ত বৈশিষ্ট্য ব্যবহার করব। আপনি যে কোডটির কল করেন সেটিকে টুকরো টুকরো না করে আপনি পদ্ধতি সংজ্ঞাটি গোপন করেন। কলিং কোডটি এখনও সংকলক দ্বারা সংকলিত এবং বৈধ হয়েছে, যদিও রানটাইমটিতে পদ্ধতিটি কল করা হয় না। #ifনির্ভরতা এড়াতে আপনি ব্যবহার করতে পারেন কারণ শর্তসাপেক্ষে আপনার কোডটি এখনও সংকলিত রয়েছে।
সি # এর একটি প্রিপ্রোসেসর রয়েছে। এটি সি ++ এবং সি এর চেয়ে কিছুটা আলাদাভাবে কাজ করে
এখানে একটি এমএসডিএন লিঙ্ক রয়েছে - সমস্ত প্রিপ্রোসেসর নির্দেশাবলীর বিভাগ ।