রানটাইমের সময় অ্যাট্রিবিউট যুক্ত করা বা রানটাইমে কোনও অ্যাট্রিবিটের মান পরিবর্তন করা সম্ভব?
রানটাইমের সময় অ্যাট্রিবিউট যুক্ত করা বা রানটাইমে কোনও অ্যাট্রিবিটের মান পরিবর্তন করা সম্ভব?
উত্তর:
বৈশিষ্ট্যগুলি স্থির মেটাডেটা। সমাবেশগুলি, মডিউলগুলি, প্রকারগুলি, সদস্যরা, পরামিতিগুলি এবং রিটার্ন মানগুলি সি # তে প্রথম-শ্রেণীর অবজেক্ট নয় (উদাঃ System.Type
শ্রেণিটি কেবল কোনও প্রকারের প্রতিফলিত প্রতিনিধিত্ব) is আপনি কোনও প্রকারের জন্য একটি অ্যাট্রিবিউটর উদাহরণ পেতে পারেন এবং বৈশিষ্ট্যগুলি লিখিত হয় তবে পরিবর্তন করতে পারেন তবে এটি টাইপটিতে প্রয়োগ হওয়ার কারণে এটি বৈশিষ্ট্যটিকে প্রভাবিত করবে না।
এটি সত্যিকার অর্থে আপনি কী সম্পাদন করতে চাইছেন তার উপর নির্ভর করে।
সিস্টেম.কম্পোনেন্টমোডেল । টাইপডেস্কিপ্টর স্টাফগুলি প্রকার, বৈশিষ্ট্য এবং অবজেক্টের দৃষ্টান্তগুলিতে বৈশিষ্ট্য যুক্ত করতে ব্যবহার করা যেতে পারে এবং সেই বৈশিষ্ট্যগুলি পুনরুদ্ধার করতে আপনাকে এটি ব্যবহার করতে হবে এমন সীমাবদ্ধতা রয়েছে। আপনি যদি সেই বৈশিষ্ট্যগুলি গ্রাস করে এমন কোডটি লিখে থাকেন এবং আপনি এই সীমাবদ্ধতার মধ্যে থাকতে পারেন তবে আমি অবশ্যই এটি প্রস্তাব করব suggest
যতদূর আমি জানি, প্রপার্টিগ্রিড নিয়ন্ত্রণ এবং ভিজ্যুয়াল স্টুডিও ডিজাইন পৃষ্ঠটিই ছাত্রলীগের একমাত্র জিনিস যা টাইপডেস্ক্রিপ্টর স্টাফ গ্রহণ করে। আসলে, তারা সত্যই তাদের করা উচিত অর্ধেক কাজ করে things
TypeDescriptor
এবং TypeDescriptionProvider
বাস্তবায়িত হয় না?
[Attr(1), Attr(2), Attr(3)]
কেবল Attr(3)
পাওয়া যায়।
ঠিক আছে, কেবল আলাদা হতে, আমি একটি নিবন্ধ পেয়েছি যা প্রতিবিম্ব ব্যবহার করে উল্লেখ করে so এটি করতে প্রেরণ করুন।
এখানে লিঙ্কটি দেওয়া আছে: http://www.codeproject.com/KB/cs/dotnetattributes.aspx , আপনি নিবন্ধের নীচে কিছু মন্তব্যগুলিও দেখতে চাইবেন, কারণ সম্ভাব্য পন্থাগুলি আলোচনা করা হয়েছে।
YourClass
মধ্যে YourRuntimeClassWithAttributes
।
YourClass
, আপনি রানটাইমের সময় এটিকে সাবক্লাস করতে এবং কিছুটা আলাদা নামের সাথে একটি অভিন্ন শ্রেণি তৈরি করতে পারতেন যা পছন্দসই গতিবেগের সাথে তৈরি বৈশিষ্ট্যও বজায় রাখতে পারে এবং বহুবৈচিত্র্য টাইপ চেকিং কোডটি এখনও সনাক্ত করতে দেয় আপনার বেসক্লাস
না এইটা না.
বৈশিষ্ট্যগুলি হ'ল মেটা ডেটা এবং সংকলিত অ্যাসেমব্লিতে বাইনারি-ফর্মে সঞ্চিত হয় (এ কারণেই আপনি কেবল সেগুলিতে সাধারণ প্রকারগুলি ব্যবহার করতে পারেন)।
আমি বিশ্বাস করি না। আমি ভুল হলেও, আপনি যে সর্বোত্তম আশা করতে পারেন তা হ'ল এগুলি একটি সম্পূর্ণ টাইপটিতে যুক্ত করা, কখনও কোনও প্রকারের উদাহরণ নয় ।
গতিশীলভাবে যুক্ত করতে আপনার যদি কিছু প্রয়োজন হয় তবে সি # বৈশিষ্ট্যগুলি উপায় নয়। এক্সএমএলে ডেটা সংরক্ষণ করার জন্য দেখুন। আমি সম্প্রতি একটি প্রকল্প করেছি যা আমি ডাব্লু / বৈশিষ্ট্যগুলি শুরু করেছিলাম, তবে শেষ পর্যন্ত ডাব্লু / এক্সএমএল সিরিয়ালাইজেশনে চলে এসেছি।
তোমার দরকার কেন? বৈশিষ্ট্যগুলি প্রতিবিম্বের জন্য অতিরিক্ত তথ্য দেয় তবে আপনি যদি বাহ্যিকভাবে জানেন যে কোন বৈশিষ্ট্যগুলি আপনি চান তবে তাদের প্রয়োজন নেই।
আপনি কোনও ডাটাবেস বা রিসোর্স ফাইলে তুলনামূলকভাবে সহজেই মেটা ডেটা সঞ্চয় করতে পারেন।
আমি সিস্টেম.কমপোমেনড মডেল.প্রকার সফলতা ছাড়াই টাইপডেস্কিটার দিয়ে খুব চেষ্টা করেছি। এর অর্থ এই নয় যে এটি কাজ করতে পারে না তবে আমি তার জন্য কোড দেখতে চাই।
পাল্টা অংশে, আমি কিছু বৈশিষ্ট্যযুক্ত মান পরিবর্তন করতে চেয়েছিলাম। আমি 2 টি কার্য সম্পাদন করেছি যা সেই উদ্দেশ্যে সূক্ষ্মভাবে কাজ করে।
// ************************************************************************
public static void SetObjectPropertyDescription(this Type typeOfObject, string propertyName, string description)
{
PropertyDescriptor pd = TypeDescriptor.GetProperties(typeOfObject)[propertyName];
var att = pd.Attributes[typeof(DescriptionAttribute)] as DescriptionAttribute;
if (att != null)
{
var fieldDescription = att.GetType().GetField("description", BindingFlags.NonPublic | BindingFlags.Instance);
if (fieldDescription != null)
{
fieldDescription.SetValue(att, description);
}
}
}
// ************************************************************************
public static void SetPropertyAttributReadOnly(this Type typeOfObject, string propertyName, bool isReadOnly)
{
PropertyDescriptor pd = TypeDescriptor.GetProperties(typeOfObject)[propertyName];
var att = pd.Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute;
if (att != null)
{
var fieldDescription = att.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
if (fieldDescription != null)
{
fieldDescription.SetValue(att, isReadOnly);
}
}
}
জাভাতে আমি কোনও মানচিত্র ব্যবহার করে এবং কী-ভ্যালু কোডিংয়ের নিজস্ব টেক প্রয়োগ করে এটিকে ঘিরে কাজ করতাম।
http://developer.apple.com/documentation/Cocoa/Conceptual/KeyValueCoding/KeyValueCoding.html
TypeDescriptor
- শুধু নাPropertyGrid
।