জাভাতে, এনামের ভিতরে পদ্ধতি থাকা সম্ভব।
সি # তে কি এরকম সম্ভাবনা আছে নাকি এটি কেবল একটি স্ট্রিং সংগ্রহ এবং এটিই?
আমি ওভাররাইড করার চেষ্টা করেছি ToString()
কিন্তু এটি সংকলন করে না। কারও কি সাধারণ কোডের নমুনা রয়েছে?
জাভাতে, এনামের ভিতরে পদ্ধতি থাকা সম্ভব।
সি # তে কি এরকম সম্ভাবনা আছে নাকি এটি কেবল একটি স্ট্রিং সংগ্রহ এবং এটিই?
আমি ওভাররাইড করার চেষ্টা করেছি ToString()
কিন্তু এটি সংকলন করে না। কারও কি সাধারণ কোডের নমুনা রয়েছে?
উত্তর:
আপনি এনাম প্রকারের জন্য এক্সটেনশন পদ্ধতিগুলি লিখতে পারেন :
enum Stuff
{
Thing1,
Thing2
}
static class StuffMethods
{
public static String GetString(this Stuff s1)
{
switch (s1)
{
case Stuff.Thing1:
return "Yeah!";
case Stuff.Thing2:
return "Okay!";
default:
return "What?!";
}
}
}
class Program
{
static void Main(string[] args)
{
Stuff thing = Stuff.Thing1;
String str = thing.GetString();
}
}
আপনি আপনার এনামের জন্য একটি এক্সটেনশন পদ্ধতি লিখতে পারেন:
কীভাবে: একটি গণনার জন্য একটি নতুন পদ্ধতি তৈরি করুন (সি # প্রোগ্রামিং গাইড)
আরেকটি বিকল্প হ'ল জিমি বোগার্ড দ্বারা নির্মিত এনুমারেশন ক্লাস ব্যবহার করা ।
মূলত, আপনাকে অবশ্যই একটি শ্রেণি তৈরি করতে হবে যা তার কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত Enumeration
। উদাহরণ:
public class EmployeeType : Enumeration
{
public static readonly EmployeeType Manager
= new EmployeeType(0, "Manager");
public static readonly EmployeeType Servant
= new EmployeeType(1, "Servant");
public static readonly EmployeeType Assistant
= new EmployeeType(2, "Assistant to the Regional Manager");
private EmployeeType() { }
private EmployeeType(int value, string displayName) : base(value, displayName) { }
// Your method...
public override string ToString()
{
return $"{value} - {displayName}!";
}
}
তারপরে আপনি এটি একটি এনুমের মতো ব্যবহার করতে পারেন, এটির মধ্যে পদ্ধতিগুলি রাখার সম্ভাবনা (অন্য জিনিসের মধ্যে):
EmployeeType.Manager.ToString();
//0 - Manager
EmployeeType.Servant.ToString();
//1 - Servant
EmployeeType.Assistant.ToString();
//2 - Assistant to the Regional Manager
আপনি এটি নিউগেটের সাহায্যে ডাউনলোড করতে পারেন ।
যদিও এই বাস্তবায়ন ভাষায় স্থানীয় নয়, সিনট্যাক্স (নির্মাণ এবং ব্যবহার) সি # এর চেয়ে ভালভাবে এনামগুলিকে প্রয়োগ করে এমন ভাষাগুলির সাথে খুব কাছাকাছি ( উদাহরণস্বরূপ কোটলিন )।
নাঃ। আপনি একটি শ্রেণি তৈরি করতে পারেন, তারপরে কিছুটা এনাম অনুকরণ করতে শ্রেণিতে একগুচ্ছ বৈশিষ্ট্য যুক্ত করতে পারেন , তবে এটি আসলে একই জিনিস নয় ।
class MyClass
{
public string MyString1 { get{ return "one";} }
public string MyString2 { get{ return "two";} }
public string MyString3 { get{ return "three";} }
public void MyMethod()
{
// do something.
}
}
আরও ভাল প্যাটার্ন হ'ল আপনার পদ্ধতিগুলি আপনার ইমাম থেকে আলাদা ক্লাসে স্থাপন করা।
যেহেতু আমি পেরিয়ে এসেছি এবং এনামের স্ট্রিংয়ের ঠিক বিপরীত প্রয়োজন, তাই এখানে একটি জেনেরিক সমাধান রয়েছে:
static class EnumExtensions {
public static T GetEnum<T>(this string itemName) {
return (T) Enum.Parse(typeof(T), itemName, true);
}
}
এটি কেসকেও উপেক্ষা করে এবং আরও ধরণের সুরক্ষা পেতে আপনার এনামের কাছে REST- প্রতিক্রিয়া পার্স করার পক্ষে খুব কার্যকরী। আশা করি এটি কাউকে সাহায্য করবে
সি # শ্রেণিভিত্তিক নীতি নয়, বরং স্ট্রিং এবং মান সহ একটি 2 মাত্রিক অ্যারে হিসাবে এটি গণকের ক্ষেত্রে পদ্ধতি ব্যবহারের অনুমতি দেয় না।
এই ক্ষেত্রে ক্লাসের ব্যবহার মাইক্রোসফ্ট দ্বারা নিরুৎসাহিত করা হয়েছে, পরিবর্তে (ডেটা) স্ট্রাক্ট (ইউরেস) ব্যবহার করুন; স্ট্রাক্টটি ডেটা এবং এটির হ্যান্ডলারের জন্য একটি হালকা শ্রেণি হিসাবে উদ্দিষ্ট এবং এটি ঠিকঠাক ফাংশন পরিচালনা করতে পারে। সি # এবং এর সংকলকটির ট্র্যাকিং এবং দক্ষতার ক্ষমতা নেই কারণ জেভিএর কাছ থেকে কেউ জানে, যেখানে নির্দিষ্ট শ্রেণি / পদ্ধতিটি যত বেশি দ্রুত ব্যবহৃত হয় তত দ্রুত সঞ্চালিত হয় এবং এর ব্যবহার 'প্রত্যাশিত' হয়ে যায়। সি # তে সহজভাবে তা নেই, তাই পার্থক্য করার জন্য, ক্লাসের পরিবর্তে স্ট্রাক্ট ব্যবহার করুন।