পরিবর্তনশীল সংখ্যক তর্ক যুক্ত করে প্রাথমিকভাবে তৈরি করা যায় এমন একটি বৈশিষ্ট্য তৈরি করা কি সম্ভব?
উদাহরণ স্বরূপ:
[MyCustomAttribute(new int[3,4,5])] // this doesn't work
public MyClass ...
পরিবর্তনশীল সংখ্যক তর্ক যুক্ত করে প্রাথমিকভাবে তৈরি করা যায় এমন একটি বৈশিষ্ট্য তৈরি করা কি সম্ভব?
উদাহরণ স্বরূপ:
[MyCustomAttribute(new int[3,4,5])] // this doesn't work
public MyClass ...
উত্তর:
বৈশিষ্ট্যগুলি একটি অ্যারে নেবে। আপনি যদি বৈশিষ্ট্যটি নিয়ন্ত্রণ করেন তবে আপনি তার params
পরিবর্তে ব্যবহার করতে পারেন (যা গ্রাহকদের কাছে ভাল, আইএমও):
class MyCustomAttribute : Attribute {
public int[] Values { get; set; }
public MyCustomAttribute(params int[] values) {
this.Values = values;
}
}
[MyCustomAttribute(3, 4, 5)]
class MyClass { }
অ্যারে তৈরির জন্য আপনার বাক্য গঠনটি কেবল বন্ধ হয়ে যায়:
class MyCustomAttribute : Attribute {
public int[] Values { get; set; }
public MyCustomAttribute(int[] values) {
this.Values = values;
}
}
[MyCustomAttribute(new int[] { 3, 4, 5 })]
class MyClass { }
আপনি এটি করতে পারেন, তবে এটি সিএলএস অনুগত নয়:
[assembly: CLSCompliant(true)]
class Foo : Attribute
{
public Foo(string[] vals) { }
}
[Foo(new string[] {"abc","def"})]
static void Bar() {}
শো:
Warning 1 Arrays as attribute arguments is not CLS-compliant
নিয়মিত প্রতিবিম্ব ব্যবহারের জন্য, একাধিক বৈশিষ্ট্য থাকা পছন্দনীয় হতে পারে, যেমন
[Foo("abc"), Foo("def")]
যাইহোক, এটি TypeDescriptor
/ এর সাথে কাজ করবে না PropertyDescriptor
, যেখানে কেবলমাত্র কোনও বৈশিষ্ট্যের একক দৃষ্টান্ত সমর্থিত (প্রথম বা শেষ জয়, আমি কোনটি স্মরণ করতে পারি না)।
কনস্ট্রাক্টরকে এভাবে ঘোষণা করার চেষ্টা করুন:
public class MyCustomAttribute : Attribute
{
public MyCustomAttribute(params int[] t)
{
}
}
তারপরে আপনি এটি ব্যবহার করতে পারেন:
[MyCustomAttribute(3, 4, 5)]
এটা ঠিক করা উচিত। বৈশিষ্ট থেকে, বিভাগ 17.2:
নিম্নোক্ত সমস্ত বিবৃতি যদি সত্য হয় তবে একটি এক্সপ্রেশন ই একটি অ্যাট্রিবিউট-আর্গুমেন্ট-এক্সপ্রেশন :
এখানে একটি উদাহরণ:
using System;
[AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
public class SampleAttribute : Attribute
{
public SampleAttribute(int[] foo)
{
}
}
[Sample(new int[]{1, 3, 5})]
class Test
{
}
মার্ক গ্রাভেলের উত্তরে পিগি ফিরে যাওয়ার জন্য, হ্যাঁ আপনি অ্যারে প্যারামিটারগুলির সাহায্যে একটি বৈশিষ্ট্য নির্ধারণ করতে পারেন তবে অ্যারে প্যারামিটারের সাথে একটি অ্যাট্রিবিউট প্রয়োগ করা সিএলএস-সম্মতিযুক্ত নয়। তবে কেবলমাত্র অ্যারের বৈশিষ্ট্যের সাথে একটি বৈশিষ্ট্য নির্ধারণ করা পুরোপুরি সিএলএস-সম্মতিযুক্ত।
আমাকে এই বিষয়টি বুঝতে পেরেছিল যে জেএসন.এনইটি, একটি সিএলএস-কমপ্লায়েন্ট লাইব্রেরি, আইটেম কনভার্টারপ্যারামিটার নামের একটি সম্পত্তি সহ একটি গুণযুক্ত জেসনপ্রোপার্টিঅ্যাট্রিবিউট রয়েছে যা এই বস্তুর একটি অ্যারে।