একই নামের জেনেরিক ক্লাস যুক্ত ফাইলগুলি গঠন এবং নাম দেওয়ার সর্বোত্তম উপায় কী?


14

আমার বর্তমান প্রকল্পে আমি একই নামে জেনেরিক ক্লাস তৈরি করার প্রয়োজনীয়তাটি পূরণ করেছি, তবে জেনেরিক পরামিতিগুলির বিভিন্ন সংখ্যা। উদাহরণ স্বরূপ:

MyClass<T1>
MyClass<T1, T2>
MyClass<T1, T2, T3>

এই সমস্তটি একই নামের জায়গাতে চাইলে আমি কীভাবে আমার ক্লাস এবং ফাইলগুলির গঠন এবং নাম রাখব তা নিয়ে আমি বিভ্রান্ত হয়ে পড়েছি?

যদি আমরা এই ধারণাটি অনুসরণ করি যে আমাদের ফাইলগুলি প্রতি ফাইলের মধ্যে একটিতে সীমাবদ্ধ থাকা উচিত এবং সেই ফাইলগুলি এমন একটি ফোল্ডার কাঠামোর মধ্যে থাকা উচিত যা নামের স্থানের শ্রেণিবিন্যাসের প্রতিনিধিত্ব করে এবং ফাইলটির নামটি শ্রেণীর নামের সাথে মিলে যায় তবে আমি এই পরিস্থিতিটি কীভাবে সামলাব? ?

আমি এখানে যা সত্যিই জিজ্ঞাসা করছি তা হ'ল যে ফাইলটি রয়েছে সেটির MyClass<T1>নামকরণ করা উচিত এবং আমি এতে থাকা ফাইলটির নাম রাখি MyClass<T1, T2>? টাইপ পরামিতিগুলির নাম কী হওয়া উচিত তা আমি জিজ্ঞাসা করছি না।


আমাদের কিছু নির্দিষ্ট উদাহরণ দিন যা সমস্যার আরও বিশদে বর্ণনা করে describe আপনার সরবরাহিত উদাহরণগুলি খুব ... এরম, জেনেরিক। "আমার ক্লাস এবং ফাইলগুলির কাঠামো ও নামকরণ কীভাবে" বলতে কী বোঝায়?
রবার্ট হার্ভে

মাইক্রোসফ্ট কেবলমাত্র টাইপ প্যারামিটারে একটি সংখ্যা যুক্ত করে এটি করে। : Tuple ডক্স দেখুন msdn.microsoft.com/en-us/library/...
পিট

@ পিট: এটি কেবলমাত্র টুপলের ক্ষেত্রে প্রযোজ্য। মাইক্রোসফ্টও TKey, TValueকনভেনশন ব্যবহার করে । ফানকের একটি TResultটাইপ প্যারামিটার রয়েছে। যদিও আমি সম্মত হই যে আপনি ব্যবহার করতে পারেন ইত্যাদি T1, T2পরিবর্তনশীল সংখ্যক ইনপুট প্যারামিটারগুলির জন্য যা অন্যথায় নির্দিষ্ট ব্যবহারের মতো TKeyএবং না থাকে TValue
রবার্ট হার্ভে

@ রবার্টহার্ভে ওয়েল, হ্যাঁ তবে কেবলমাত্র একটি আসল কী / মান সংগ্রহ যেমন একটি অভিধানের প্রসঙ্গে। পরিবর্তনশীল সংখ্যার ধরণের সমন্বিত যে কোনও কিছুর জন্য তারা একটি সংখ্যা যুক্ত করে। এখানে আরেকটি উদাহরণ দেওয়া আছে: msdn.microsoft.com/en-us/library/dd402872(v=vs.110).aspx
পিট

1
ঠিক আছে, আপনার সম্পাদনাগুলি কিছু মন্তব্য অপ্রচলিত। :) আপনি কেন কেবল একই শারীরিক ফাইলে ক্লাস রাখতে পারবেন না? যদি সেগুলি এত আলাদা হয় যে আপনার পৃথক ফাইলগুলিতে রাখতে হবে তবে আপনি কী তাদের আলাদা করতে পারবেন তা আমাদের বলতে পারেন?
পিট

উত্তর:


14
MyGenericClass`1.cs
MyGenericClass`2.cs
MyGenericClass`3.cs

এবং ঠিক তেমন, যেখানে ব্যাকটিকের পরে সংখ্যাটি জেনেরিক ধরণের পরামিতিগুলির সংখ্যা। এই সম্মেলনটি মাইক্রোসফ্ট ব্যবহার করে।

বিকল্পভাবে, আপনি এর মতো কিছু ব্যবহার করতে পারেন

MyGenericCollectionClass[TKey, TValue].cs

যা কেবল জেনেরিক ধরণের পরামিতিগুলির সংখ্যাই নয়, তাদের নির্দিষ্ট নামও সংরক্ষণ করে। মঞ্জুর, এটি কোণ বন্ধনী সংরক্ষণ করে না, তবে আমরা আমাদের জীবনে যা কিছু চাই তা পেতে পারি না, পারি?


1
সংকলকটি অভ্যন্তরীণভাবে জেনেরিক প্রকারের নামের সাথে মিঙ্গুল করে, ব্যাকটিক এবং জেনেরিক পরামিতিগুলির সংখ্যা যুক্ত করে N সুতরাং ফাইলের নামকরণের কনভেনশনটি কম্পাইলারের সাথে কী মেলে।
কোডসইনচওস

1
আমি আপনাকে ভুল প্রমাণ করতে চেয়েছিলাম, তবে আসলে আপনি সঠিক: github.com/dotnet/corefx/tree/master/src/… আমি এই সম্মেলনটি পছন্দ করি না।
ডেন

1
@ ডেন, মনে হচ্ছে এখন তারা সেই সম্মেলন থেকে অনুশোচনা করেছে। এটি কিছু সমস্যা বোঝা? github.com/dotnet/corefx/commit/…
সাম

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

ফাইলের নামে "` "ব্যবহার করার জন্য বলগুলি আমার কাছে নেই।
ক্রিশ্চিয়ান ই।

4

পিট উল্লেখ করেছে Tupleএবং এর ক্ষেত্রে Actionমাইক্রোসফ্টরা নিজেরাই একটি একক ফাইল ব্যবহার করে - Tuple.cs এবং Action.cs দেখুন

আমি মনে করি এটি আংশিকভাবে সমস্ত শ্রেণীর কার্যকারিতা মূলত একই কিনা তার উপর নির্ভর করে। ব্যক্তিগতভাবে আমি একক ফাইলে লম্পিং ক্লাস পছন্দ করি না তবে এটি ব্যতিক্রম হতে পারে। সোর্স কোড যেখানে আমি কাজ করি সেখানে আমি একটি অটোজেনারেটেড (টি 4 ব্যবহার করে) NamedTupleক্লাস যুক্ত করেছি যা একইভাবে কাজ Tupleকরে তবে কনস্ট্রাক্টরের প্রথম স্ট্রিং হিসাবে একটি স্ট্রিং নাম দিয়ে।

আপনার প্রশ্নের জবাব দেওয়ার জন্য, আপনি যদি কোনও একক ফাইল ব্যবহার না করতে চান তবে সম্ভবত মাইক্লাস_1 সিএস এর জন্য MyClass<T1>, মাইক্লাস_2 সিএস MyClass<T1, T2>ইত্যাদি ব্যবহার করুন etc.

যদিও কোনও বিকল্পই আদর্শ নয়, সুতরাং আমি "মাইক্রোসফ্ট এটি এভাবে কর, তাই ..." যুক্তি দেওয়ার পরামর্শ দিতে চাই।


2
Tupleএবং Actionসমস্ত প্রতিনিধি; তাদের কোনও প্রয়োগের কোড নেই, সুতরাং পৃথক ফাইলগুলিতে সমস্ত প্রকারের পরিবর্তন করা যাহাই হউক না কেন অর্থহীন। কেবল প্রমাণিত হয় যে প্রতিটি নিয়মের ব্যতিক্রম রয়েছে।
রবার্ট হার্ভে

হ্যাঁ সাধারণভাবে একই ফাইলে একাধিক সরকারী প্রতিনিধি স্থাপন করা ভাল বলে বিবেচিত হয় (তবে তারা সম্পর্কিত হয়)।
স্টিফেন

1
@ রবার্টহারভে, Tupleকোনও প্রতিনিধি নয়, তবে প্রতিটি প্রয়োগ যাইহোকই সংক্ষিপ্ত।
আর্টুরো টরেস সানচেজ

@ আরতুরো টরেস সানচেজ: ঠিক আছে, আমি ভাবছিলাম Func
রবার্ট হার্ভে

0

আপনি কি নিজেকে জিজ্ঞাসা করেছেন, যদি ক্লাসগুলির সত্যই একই উদ্দেশ্য থাকে? তাহলে এক বর্গ অন্য বেশী জেনেরিক হয়, তাহলে এটি একটি হতে হবে GenericClass , একটি MoreGenericClass এবং MostGenericClass । কল্পনা করুন যে শ্রেণীর প্রতিটি ধরণের প্যারামিটার ক্লাসে একটি নতুন মাত্রা যুক্ত করে, তাই এটি কী মাত্রা তা জিজ্ঞাসা করতে সহায়তা করতে পারে।

এই উদাহরণটি নেওয়া যাক:

  • Container<Thing>
  • MetricContainer<Thing, Metric>
  • MetricTransportableContainer<Thing, Metric, Transport>

আমি সচেতন, এটি সর্বোত্তম উদাহরণ নয়, তবে তিনটি মাত্রা দেখানোর জন্য অত্যন্ত অভিব্যক্তিপূর্ণ:

  • অভ্যন্তরীণ মাত্রা, এটি কী লোড করতে পারে
  • মেট্রিক ডাইমেনশন, যা মেট্রিক দিয়ে এটি লোড করা যায়, কেবল জিনিসগুলির গণনা বা বর্গাকার পরিমাপ বা ঘনক্ষেত্র ক্ষমতা বা ওজন দ্বারা
  • বাইরের মাত্রা, যেখানে এটি লোড করা যায়।

সুতরাং আপনি গাড়ি পরিবহনের মডেল করতে পারেন:

Container<Cars>
MetricContainer<Cars, CountMetric>
MetricTransportableContainer<Cars, CountMetric, Ship>

তরল পরিবহন:

Container<Fluid>
MetricContainer<Fluid, Volume>
MetricTransportableContainer<Fluid, Volume, Shelf>

শক্তি পরিবহন:

Container<Energy>
MetricContainer<Energy, ElectricPower>
MetricTransportableContainer<Energy, ElectricPower, Box>

চিনি, সিরিয়াল পরিবহন:

Container<CrumblyMaterial>
MetricContainer<CrumblyMaterial, Weight>
MetricTransportableContainer<CrumblyMaterial, Weight, Silo>

ওহ, কী আশ্চর্য: List<T>একটিতে একটি মাত্রা রয়েছে যা তালিকায় থাকা জিনিসগুলিকে উপস্থাপন করে; এবং এটি এমন Map<T, S>দুটি মাত্রা যা মানচিত্র ধারণ করতে পারে এবং অ্যাক্সেস কীগুলি উপস্থাপন করে।


1
আপনি প্রশ্নটি বুঝতে পেরেছি বলে আমি মনে করি না। প্রশ্নের শেষ অনুচ্ছেদ দেখুন।
রবার্ট হার্ভে

1
@ রবার্টহার্ভে দয়া করে প্রশ্নটি মনোযোগ সহকারে পড়ুন: শ্রেণিবদ্ধ হওয়া উচিত ফাইলের নামের তুলনায়। এটি পরস্পর বদলে যায়। সমস্যাটি শ্রেণীর ভুল বিশ্লেষণ এবং সাধারণভাবে জেনেরিক শ্রেণির ভুল নামকরণের মধ্যে রয়েছে। আমার উত্তরটি সংক্ষেপে বলা যায়: "এটি কী এবং এটি যা বলে মনে হচ্ছে তা নয় এটির নাম দিন" "
shylynx


1
@ রবার্টহারভে আমার উত্তরটি পড়ুন: একটি ক্লাসকে একটি ফাইলে রাখুন!
shylynx

1
আমি মনে করি আপনি পয়েন্টটি মিস করছেন। প্রশ্ন জিজ্ঞেস করল: আমি কিভাবে করা না Tuple<T1>, Tuple<T1, T2>এবং Tuple<T1, T2, T3>নাম সংঘর্ষে ছাড়া একটি আদর্শ উপায় পৃথক সি এস ফাইল মধ্যে?
রবার্ট হার্ভে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.