সি # তে থাকা এনামদের কি নিজস্ব ফাইল থাকা উচিত? [বন্ধ]


178

আমার একটি ক্লাস রয়েছে যা একটি গণনা ব্যবহার করে, এনাম বর্তমানে নিজস্ব ফাইলে রয়েছে যা অপব্যয়জনক বলে মনে হচ্ছে।

এনামগুলিতে যে ফাইলটি সেগুলি গ্রাস করা হয় তার নামের স্থানের মধ্যে রাখার বিষয়ে সাধারণ মতামতটি কী? অথবা এনামগুলি কি সত্যই তার নিজস্ব সিএস ফাইলে বাস করা উচিত?

সম্পাদন করা

আমার উল্লেখ করা উচিত যে প্রশ্নে ক্লাসটি যখন এই গণনাগুলি ব্যবহার করে তখন বহিরাগত কলাররাও তাই করে। অন্য কথায়, অন্য শ্রেণি এই গণনাগুলি সেট করতে পারে। সুতরাং তারা শ্রেণিতে অভ্যন্তরীণভাবে ব্যবহৃত হয় না, অন্যথায় এই প্রশ্নটি কোনও বুদ্ধিমানের হবে না।


86
আপনি যদি ম্যাজিক নম্বর ব্যবহার করেন তবে আপনার এ সমস্যাটি হবে না।
মুসিজেনেসিস

7
এটি কি সম্প্রদায়ের উইকি হওয়া উচিত? আইডিই সক্ষমতার বাইরে কোনও সঠিক উত্তর নেই এবং আসল প্রযুক্তিগত বিবেচনা নেই।
জেফ স্টার্নাল

1
তারা বিভিন্ন ফাইলে থাকলেও তারা একই নামস্থানে থাকতে পারে। আপনি যদি একটি .Enums নেমস্পেস এবং একটি নতুন ফাইল তৈরি করবেন কিনা সে সম্পর্কে দ্বিতীয় প্রশ্নটি জিজ্ঞাসা করছেন, তবে আমি বলব, সাধারণত, না। তবে অন্যথায়, আপনার নামের জায়গাগুলি সম্পর্কে আপনার ধারণা ভুল হতে পারে এবং সেগুলি সম্পর্কে পড়তে হবে - (তাদের কাছে খুব বেশি কিছু নয়, কেবলমাত্র একটি সংস্থা প্রক্রিয়া)
জেসন ক্লেবান

1
নিজের ফাইলটিতে এনাম ঘোষণা করা প্রোগ্রামারকে সহজেই কমান্ড উইন্ডো ([[এনাম নাম] এর)) ব্যবহার করে এনাম সনাক্ত করতে দেয়
রিজু

উত্তর:


103

আমি "অপব্যয়ী" বলব না (একটি অতিরিক্ত ফাইলের জন্য কত খরচ হয়?), তবে এটি প্রায়শই অসুবিধে হয়। সাধারণত এক শ্রেণি থাকে যা এনামের সাথে সান্নিধ্যযুক্ত হয় এবং আমি সেগুলি একই ফাইলে রাখি।


7
এটি ব্রাউজ করার সময় ডিরেক্টরিতে গোলমাল যুক্ত করে, এটাই আমি অপব্যয় দ্বারা বোঝাতে চাইছি।
ফিঙ্গলাস

117
@ ফিঙ্গলাস - একজনের শব্দ অন্য ব্যক্তির সংকেত!
জেফ স্টার্নাল

6
সাধারণত একটি শ্রেণি রয়েছে যা সবচেয়ে ঘনিষ্ঠভাবে জড়িত। তবে যদি এটি পরিবর্তন হয়, যদি কেউ একবারে এনামের উপর নির্ভরতা নেওয়ার সিদ্ধান্ত নেয়, তবে সময়টি রিফ্যাক্টরের জন্য।
ব্রেনান পোপ

2
এনামকে যদি বিভিন্ন ক্লাসে ভাগ করে নেওয়া হয় তবে এটি আলাদা একটি ফাইলে রাখাই ভাল।
কনরাড

76

এটি সত্যিই কেবল পছন্দের বিষয়।

আমি প্রতিটি অঙ্কটি তার নিজের ফাইলে রাখতে পছন্দ করি (একইভাবে প্রতিটি ইন্টারফেস, শ্রেণি এবং কাঠামোর জন্য, যতই ছোট হোক না কেন)। আমি যখন অন্য কোনও সমাধান থেকে আসছি বা অন্যথায় ইতিমধ্যে প্রশ্নের ধরণের কোনও রেফারেন্স নেই তখন এটি তাদের অনুসন্ধান করা সহজ করে তোলে।

প্রতিটি ফাইলে একটি একক প্রকার স্থাপন করাও ভিন্ন ভিন্ন উত্স নিয়ন্ত্রণ সিস্টেমে পরিবর্তনগুলি সনাক্ত করা সহজ করে তোলে।


10
"প্রতিটি ফাইলে একটি একক প্রকার স্থাপন করাও আলাদা না করে উত্স নিয়ন্ত্রণ সিস্টেমে পরিবর্তনগুলি সনাক্ত করা সহজ করে তোলে।" ভিন্নতার ভয় আপনার নকশার সিদ্ধান্তগুলির ভিত্তি তৈরি করে না। আমি এমনকি তর্ক করতে পারি যে যে কেউ সোর্স নিয়ন্ত্রণে কোনও ফাইলকে কীভাবে সঠিকভাবে পৃথক করতে জানে না সে সত্যই উত্স নিয়ন্ত্রণ ব্যবহার করছে না।
ড্যান বেচার্ড

59

এটি পুরোপুরি শৈলীর বিষয়। আমি যা করতে চাই তা হ'ল Enums.csএনামের ঘোষণাগুলি সংগ্রহ করা হয় এমন সমাধানে একটি ফাইল ডেকে আনা ।

তবে এগুলি সাধারণত F12কীটির মাধ্যমেই পাওয়া যায় ।


4
আমি মনে করি এটি সম্ভবত এটি সর্বোত্তম বিকল্প হিসাবে এটি: 1) অনেকের পরিবর্তে কেবল একটি ফাইল যা ডিরেক্টরি 2 কে গোলমাল হিসাবে বিবেচনা করা যেতে পারে) 3 ফাইলের মধ্যে যা রয়েছে তা পরিষ্কার হয়ে গেছে) এর মানে হল যে আপনি জানেন যে enumপরিবর্তে একটি কোথায় পাবেন? এটি একটি ফাইল হচ্ছে একটি শ্রেণী যেটি সম্পর্কযুক্ত ধারণকারী কিন্তু অগত্যা শুধুমাত্র বর্গ এটি ব্যবহার
dav_i

6
আমি একেবারে এটি পছন্দ করি না। জেমস কররানের উত্তরে যেমন বলা হয়েছে, এনামদের বেশিরভাগ শ্রেণীর সাথে সম্পর্ক রয়েছে। তাদের সমস্তকে একটি বিশ্বব্যাপী ফাইলে রাখার সময়, তারা এমনকি কোনও ডিরেক্টরিতে নেই (সাব-নেমস্পেসের জন্য) যেখানে তারা তাত্ত্বিকভাবে সম্পর্কিত হতে পারে।
রায়

3
হ্যাঁ দেবুগের, আমি আপনার সাথে একমত যেহেতু এই উত্তরটি ২০১০ সালে ফিরে পোস্ট করা হয়েছিল আমি বিভিন্ন পদ্ধতির মধ্যে পরিবর্তন করেছি এবং প্রতি প্রকারের একটি ফাইলের সাথে যাওয়ার প্রবণতা করেছি, বা একই শ্রেণিতে এনামগুলিকে সম্পর্কিত শ্রেণীর হিসাবে ঘোষণা করছি।
ফ্রেডরিক মের্ক

@ রে ...enums have a relation to classes mostly.। এই যেখানে আপনি আমাকে হারিয়েছেন। আপনি উদাহরণস্বরূপ একটি ক্লাসের সাথে সম্পর্কযুক্ত এনামগুলিকে কীভাবে পরিচালনা করবেন?
কে - এসও-তে বিষক্রিয়া বাড়ছে।

@ কার্লমরিসন দয়া করে, সেই মন্তব্যটি 5 বছরের পুরানো। যাইহোক, আমি একটি কারণের জন্য "বেশিরভাগ" শব্দটি যুক্ত করেছি। এনামদের সাথে কেবলমাত্র ক্লাসের সাথে নেমস্পেসের মতো সম্পর্ক রয়েছে। আমি যদি AnchorStyleকোনও ইউআই লাইব্রেরি জুড়ে এনাম ব্যবহার করি তবে আমার সাধারণত একটি ইউআই সাব নেমস্পেস এবং সংশ্লিষ্ট ফোল্ডার থাকত। তারপরে আমি AnchorStyle.csএটি ইউআই ফোল্ডারে এমন একটি ফাইলে রাখি যেখানে আমি সহজেই এটি খুঁজে পেতে পারি, সাধারণভাবে নামকরণ করা "এনামস.সি.এস" ফাইলটিতে নয়।
রায়

47

নিজেকে জিজ্ঞাসা করার প্রশ্নটি হ'ল: সি # তে একটি গণনার ধরন সম্পর্কে এমন কিছু রয়েছে যা ইঙ্গিত করে যে আমার তৈরি অন্যান্য সমস্ত প্রকারের থেকে আমার এটির চেয়ে আলাদা আচরণ করা উচিত?

যদি গণনাটি সর্বজনীন হয় তবে এটি অন্য যে কোনও সরকারী ধরণের মতো আচরণ করা উচিত। যদি এটি ব্যক্তিগত হয় তবে এটি ব্যবহার করে শ্রেণীর নেস্টেড সদস্য হিসাবে ঘোষণা করুন। একটি গণনা হওয়ায় কেবল একই ফাইলে দুটি পাবলিক প্রকার স্থাপন করার কোন বাধ্যতামূলক কারণ নেই। এটি সর্বজনীন যে সত্য তা হ'ল সমস্ত বিষয়; টাইপ এর গন্ধ না।


আপনি যদি একই এন্টারপ্রাইজ প্রকল্পের ভিন্ন সমাধানে এনামগুলিকে পুনরায় ব্যবহার করতে চান তবে কী হবে? এটি ব্যবহার করে শ্রেণীর সাথে বাঁধাই করা এটিকে পুনরায় ব্যবহার করা খুব কঠিন হবে।
এমকো

@ এমকো: প্রকল্প রেফারেন্সটির অর্থ ইতিমধ্যে শ্রেণি এবং এনাম উভয়ই পৃথক সমাধানের জন্য উপলব্ধ থাকবে। এটিকে কী কঠিন করে তুলবে?
ব্রায়ান ওয়াটস

অবশ্যই, তবে আপনি যদি কেবল এনাম ব্যবহার করতে চান তবে আপনি কি সত্যই তার যুক্তি দিয়ে পুরো ক্লাসটি ভাগ করতে চান? আরও আরও কি কি যদি একটি পৃথক শ্রেণি একই গণনা ভাগ করে। কোথায় রাখবেন?
mko

@ এমকো: একটি প্রকল্পের রেফারেন্স সহ, আপনি উভয় প্রকারেরই পাবেন যেগুলি বিভিন্ন ফাইলে রয়েছে বা না। আপনি যা জিজ্ঞাসা করছেন তা নির্ধারণ করতে আমার সমস্যা হচ্ছে।
ব্রায়ান ওয়াটস

ভাল আমি প্রকল্পের রেফারেন্স সম্পর্কে কথা বলছি না, আপনি হয়। আমি একটি ভাগ করা প্রকল্পের ফাইলগুলিতে এনামগুলিকে সরানোর বিষয়ে কথা বলছি এবং সম্পূর্ণ ক্লাসটি প্রকাশ না করে একাধিক প্রকল্পে এটি পুনরায় ব্যবহার করতে সক্ষম হব। আপনি বলছেন "একই গণিতে দুটি কারণ একই ফাইলে দুটি পাবলিক প্রকারের স্থাপনের কোন বাধ্যতামূলক কারণ নেই"। আপনি যদি আমার ব্যাখ্যা অনুসরণ করেন তবে একই ফাইলটিতে সমস্ত এনামগুলিকে রাখার কারণ রয়েছে।
এমকো

24

প্রতিটি ফাইল (শ্রেণি, কাঠামো, এনাম) এর নিজের ফাইলে রাখার আরেকটি সুবিধা হ'ল উত্স নিয়ন্ত্রণ। আপনি সহজেই টাইপের পুরো ইতিহাসটি পেতে পারেন।


18

আমি বেশিরভাগ ভিতরে নেমস্পেসের ভিতরে এবং ক্লাসের বাইরে রাখি যাতে এটি নীচের মতো নেমস্পেসে অন্যান্য ক্লাসে সহজেই অ্যাক্সেসযোগ্য হয়।

namespace UserManagement
{
    public enum UserStatus { Active, InActive }
    class User
    {
        ...
    }
}

কি দারুন. আমি জানি না যে এনামগুলিকে সরাসরি নামস্থানতে স্থাপন করা যেতে পারে। আমি এই উত্তর দিয়ে যাচ্ছি। আমার এমভিসি কাঠামোর ভিতরে এগুলি নিয়ন্ত্রণকারীর ভিতরে স্থাপন করা হবে যা আমার পক্ষে যুক্তিযুক্ত makes এর জন্য ধন্যবাদ. সম্মত।
সি

11

সাধারণত আমি আমার এনামগুলিকে ক্লাসের মতো একই ফাইলে থাকতে পছন্দ করি যা সম্ভবত এটির একটি বৈশিষ্ট্য হবে। উদাহরণস্বরূপ যদি আমার ক্লাস থাকে Taskতবে এনাম TaskStatusএকই ফাইলে থাকবে।

তবে, আমার যদি আরও জেনেরিক প্রকৃতির এনাম থাকে তবে আমি এগুলিকে প্রাসঙ্গিকভাবে বিভিন্ন ফাইলে রাখি।


বিভিন্ন শ্রেণি যদি একই এনাম ব্যবহার করে তবে কী হবে?
এমকিও

2
@ এমকো - সে কারণেই আমি বলেছিলাম (২০১০ সালে আমি যখন এর উত্তর দিয়েছিলাম) যে এনামগুলিতে আরও জেনেরিক প্রকৃতি থাকলে আমি তাদের পৃথক ফাইলে রাখি। প্রসঙ্গক্রমে আমি বোঝাতে চেয়েছিলাম যে কিছু ক্ষেত্রে কিছু এনামগুলি একটি পৃথক ফাইলে থাকতে পারে এবং অন্য ক্ষেত্রে আমি একক ফাইলে এনাম ঘোষণার একটি সেট তৈরি করতে পারি।
নিকোস স্টিয়াকাকিস

10

এটি কী অ্যাক্সেসের প্রয়োজন তা নির্ভর করে।

যদি এনামটি কেবলমাত্র একটি একক শ্রেণীর দ্বারা ব্যবহৃত হয় তবে that শ্রেণীর মধ্যে এটি ঘোষণা করা ঠিক আছে কারণ আপনার অন্য কোথাও এটি ব্যবহার করার দরকার নেই।

একাধিক ক্লাস দ্বারা বা একটি পাবলিক এপিআই-তে ব্যবহৃত এনামগুলির জন্য, তবে আমি সর্বদা যথাযথ নেমস্পেসে নিজের ফাইলটিতে সংজ্ঞাটি রাখব। সেভাবে সন্ধান করা এটি আরও সহজ এবং কৌশলটি প্রতি ফাইল-ও-অবজেক্টের ধরণ অনুসরণ করে, যা ক্লাস এবং ইন্টারফেসের পাশাপাশি ব্যবহার করা ভাল।


8

আমি মনে করি এটি এনামের সুযোগের উপর নির্ভর করে। উদাহরণস্বরূপ, যদি এনামটি একটি শ্রেণীর সাথে সুনির্দিষ্ট হয়, উদাহরণস্বরূপ যাদুর ধ্রুবক দৃশ্য এড়াতে ব্যবহৃত হয়, তবে আমি বলব এটি ক্লাসের মতো একই ফাইলে রাখুন:

enum SearchType { Forward, Reverse }

যদি এনামটি সাধারণ হয় এবং বিভিন্ন পরিস্থিতিতে বিভিন্ন শ্রেণীর জন্য ব্যবহার করা যায় তবে আমি এটির নিজের ফাইলে এটি ব্যবহার করতে আগ্রহী। উদাহরণস্বরূপ নীচে বিভিন্ন উদ্দেশ্যে ব্যবহার করা যেতে পারে:

enum Result { Success, Error }

6

আমি খুব সাধারণ কারণে তাদের নিজস্ব ফাইলগুলিতে এনামগুলি রাখার প্রবণতা রাখি: ক্লাস এবং স্ট্রাক্টগুলির মতো, আপনি কোনও ধরণের সংজ্ঞা পেতে চান কিনা ঠিক কোথায় দেখতে হবে তা জেনে ভাল : একই নামের ফাইলটিতে in (সত্যি বলতে, ভিএস-এ আপনি সর্বদা "সংজ্ঞাতে যান" ব্যবহার করতে পারেন))

স্পষ্টতই, এটি হাত থেকে উঠতে পারে। একজন সহকর্মী যেখানে আমি কাজ করি তা প্রতিনিধিদের জন্য পৃথক ফাইলও তৈরি করে।


6

এনামগুলির জন্য পৃথক ফাইল ব্যবহার করার একটি সুবিধা হ'ল আপনি এনাম ব্যবহার করে এমন মূল ক্লাসটি মুছতে পারেন এবং এনুম ব্যবহার করে একটি নতুন ক্লাস লিখতে পারেন।

এনাম যদি মূল শ্রেণীর চেয়ে স্বতন্ত্র থাকে তবে এটিকে একটি পৃথক ফাইলে রাখলে ভবিষ্যতের পরিবর্তনগুলি আরও সহজ হয়।


6

আপনি যদি ভিজুয়াল স্টুডিওর জন্য ইউএসওয়াইয়ার ফাইল ব্রাউজার অ্যাড-ইন ব্যবহার করছেন, আপনি খুব দ্রুত আপনার সমাধানে নির্দিষ্ট নামের ফাইলগুলি খুঁজে পেতে পারেন। এমন কোনও এনামের সন্ধান করুন যা তার নিজের ফাইলে নেই তবে পরিবর্তে কোনও ফাইলকে একটি বিশাল সমাধানে দাফন করা হয়েছে।

ছোট সমাধানগুলির জন্য, এটি কোনও ব্যাপার নয়, তবে বড় আকারেরগুলির জন্য, ক্লাস এবং এনামগুলিকে তাদের নিজস্ব ফাইলে রাখা আরও গুরুত্বপূর্ণ হয়ে ওঠে। আপনি এগুলি দ্রুত খুঁজে পেতে, এডিট করতে এবং আরও অনেক কিছু পেতে পারেন। আমি অত্যন্ত, আপনার এনামকে তার নিজস্ব ফাইলে রাখার জন্য অত্যন্ত পরামর্শ দিচ্ছি।

এবং যেমনটি বলা হয়েছিল ... এমন ফাইলটি কীভাবে অপচয়যোগ্য যা কেবলমাত্র কয়েক কেবি হয়ে গেলেও শেষ হয়?


আমি অ্যাড-ইনটিও ব্যবহার করি, এটি বেশ কার্যকর। আমি তাদের নিজস্ব ফাইলগুলিতে এনামগুলি রাখতাম, সমাধানটি বড় বা ছোট হোক না কেন।
রুই জারিম্বা

5

পৃথক ফাইল খুব সহজ বিশাল সুবিধা। যখন কোনও বস্তু তার নিজস্ব মাইবজেক্টনাম.সি.সি. ফাইলগুলিতে থাকে ... আপনি সমাধান এক্সপ্লোরারে গিয়ে মাইওবজেক্টনাম.সি.সি টাইপ করতে পারেন এবং ঠিক 1 ফাইল দেখানো যেতে পারে। ডিবাগিংকে আরও ভাল করে তোলে এমন কোনও কিছুই দুর্দান্ত।

অনুরূপ নোটের আরেকটি সুবিধা, যদি আপনি একটি নামের জন্য সমস্ত ফাইল ( ctrl+ shft+ F) অনুসন্ধান করেন তবে আপনি একই ফাইলটিতে নামের জন্য 20 টি রেফারেন্স পেতে পারেন ... এবং পাওয়া যায় যে নামটি বিভিন্ন বস্তুর অংশ হবে। ফলাফলগুলি উইন্ডোতে আপনি দেখতে পাচ্ছেন যা হ'ল লাইন নম্বর এবং ফাইলের নাম। খুঁজে পাওয়া রেফারেন্সটি কোন বস্তুর মধ্যে ছিল তা নির্ধারণ করতে আপনাকে ফাইলটি খুলতে হবে এবং স্ক্রোল করতে হবে।

ডিবাগ করা সহজ করে এমন যে কোনও কিছু আমার পছন্দ হয়।


2

আপনার যদি একটি সমাধানে একাধিক প্রকল্প থাকে। তারপরে আরও একটি প্রকল্প তৈরি করুন Utilities। তারপরে একটি ফোল্ডার \Enumerationsতৈরি করুন এবং নেস্টেড তৈরি করুন static class। এবং তারপরে প্রতিটি স্ট্যাটিক ক্লাস নিযুক্ত করুন যেখানে আপনি এনাম তৈরি করবেন যা আপনার প্রকল্পের নামের সাথে মিলে যায়। উদাহরণস্বরূপ, আপনার কাছে ডাটাবেস রিডার এবং ডাটাবেস ব্যবহারকারীদের নামের একটি প্রকল্প রয়েছে তবে আপনি স্ট্যাটিক শ্রেণীর নাম পছন্দ করতে পারেন

public static class EnumUtility {
    #region --Database Readers Enum
    public static class EnumDBReader {
         public enum Actions { Create, Retrieve, Update, Delete}; 
    }
    #endregion

    #region --Database Users Enum
    public static class EnumDBUsers {
         public enum UserIdentity { user, admin }; 
    }
    #endregion

}

তারপরে প্রতিটি এনাম যা প্রতিটি প্রকল্পের সম্পূর্ণ সমাধানগুলিতে ব্যবহৃত হতে পারে তা এটি ঘোষিত হবে। regionপ্রতিটি উদ্বেগ আলাদা করতে # ব্যবহার করুন । এটির দ্বারা, কোনও এনামগুলির সন্ধান করা আরও সহজ


1

আমি ই ই নামের একটি পাবলিক এনাম ফাইল রাখতে চাই যাতে প্রতিটি পৃথক এনাম থাকে, তবে যে কোনও এনামের সাথে ই ব্যবহার করা যেতে পারে ... এবং তারা পরিচালনা করার জন্য এক জায়গায় রয়েছে in

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.