মুহুর্তের জন্য এটি এখনও রোজলিন সংকলক দ্বারা বাক্সের বাইরে সমর্থিত নয় ...
এখন অবধি এক্সটেনশন বৈশিষ্ট্যগুলি সি # স্ট্যান্ডার্ডের পূর্ববর্তী সংস্করণগুলিতে অন্তর্ভুক্ত করার মতো যথেষ্ট মূল্যবান হিসাবে দেখা যায় নি। সি # 7 এবং সি # 8.0 এটিকে প্রস্তাবের চ্যাম্পিয়ন হিসাবে দেখেছে তবে এটি এখনও প্রকাশ করা হয়নি, বেশিরভাগ কারণ ইতিমধ্যে বাস্তবায়ন থাকলেও তারা শুরু থেকেই এটিকে তৈরি করতে চায়।
তবে এটি হবে ...
সি # 7 কাজের তালিকায় একটি এক্সটেনশন সদস্য আইটেম রয়েছে যাতে এটি অদূর ভবিষ্যতে সমর্থিত হতে পারে। সম্পর্কিত আইটেমের আওতায় গিথুব-এ এক্সটেনশন সম্পত্তির বর্তমান অবস্থা পাওয়া যাবে ।
তবে আরও একটি আশাব্যঞ্জক বিষয় রয়েছে যা বিশেষত সম্পত্তি এবং স্থির শ্রেণি বা এমনকি ক্ষেত্রগুলিকে কেন্দ্র করে "সমস্ত কিছু প্রসারিত করুন " ।
তবুও আপনি একটি workaround ব্যবহার করতে পারেন
এই নিবন্ধে উল্লিখিত হিসাবে , আপনি TypeDescriptor
রানটাইমের সময় কোনও অবজেক্টের উদাহরণগুলিতে একটি বৈশিষ্ট্য সংযুক্ত করার জন্য ক্ষমতাটি ব্যবহার করতে পারেন । তবে এটি স্ট্যান্ডার্ড বৈশিষ্ট্যের সিনট্যাক্স ব্যবহার করছে না।
এটি কেবল সিনট্যাকটিক চিনির থেকে কিছুটা আলাদা যা বর্ধিত সম্পত্তি
string Data(this MyClass instance)
যেমন বর্ধনের পদ্ধতির জন্য একটি উপাধার
string GetData(this MyClass instance)
যেমন শ্রেণিতে ডেটা সংরক্ষণ করে তার সংজ্ঞা দেওয়ার সম্ভাবনা যুক্ত করে ।
আমি আশা করি যে সি # 7 সম্পূর্ণ বৈশিষ্ট্যযুক্ত এক্সটেনশন সবকিছু সরবরাহ করবে (বৈশিষ্ট্য এবং ক্ষেত্র), তবে সেই সময়ে, কেবল সময়ই বলে দেবে।
এবং আগামীকালের সফ্টওয়্যারটি সম্প্রদায় থেকে আসবে বলে অবদান নির্দ্বিধায় করুন।
আপডেট: আগস্ট 2016
যেমন ডটনেট টিম সি # 7.0 তে নতুন কী প্রকাশ করেছে এবং ম্যাডস টোরজেনসেনের একটি মন্তব্য থেকে :
এক্সটেনশান বৈশিষ্ট্য: গ্রীষ্মে আমাদের অন্যান্য ধরণের এক্সটেনশন সদস্যদের পাশাপাশি একটি (উজ্জ্বল!) ইন্টার্ন প্রয়োগ করা হয়েছিল। আমরা এতে আগ্রহী রয়েছি, তবে এটি একটি বড় পরিবর্তন এবং আমাদের আত্মবিশ্বাস বোধ করা দরকার যে এটি উপযুক্ত।
দেখে মনে হচ্ছে এক্সটেনশন বৈশিষ্ট্য এবং অন্যান্য সদস্যরা এখনও রোজলিনের ভবিষ্যতে প্রকাশের জন্য অন্তর্ভুক্ত থাকার জন্য ভাল প্রার্থী, তবে সম্ভবত .0.০ নয়।
আপডেট: মে 2017
এক্সটেনশন সদস্যরা সমস্ত বন্ধ ইস্যুটির ডুপ্লিকেট হিসাবেবন্ধ হয়ে গেছে যা খুব বন্ধ। মূল আলোচনাটি প্রকৃত অর্থে প্রকারের এক্সটেনসিবিলিটি সম্পর্কে ছিল। বৈশিষ্ট্যটি এখন একটি প্রস্তাব হিসাবে এখানে ট্র্যাক করা হয়েছে এবং 7.0 মাইলফলক থেকে সরানো হয়েছে।
আপডেট: আগস্ট, 2017 - সি # 8.0 প্রস্তাবিত বৈশিষ্ট্য
যদিও এটি এখনও কেবল প্রস্তাবিত বৈশিষ্ট্য হিসাবে রয়ে গেছে , এর সিনট্যাক্সটি কী হবে সে সম্পর্কে আমাদের কাছে এখন আরও পরিষ্কার ধারণা রয়েছে। মনে রাখবেন যে এটি এক্সটেনশন পদ্ধতির জন্য নতুন সিনট্যাক্সও হবে:
public interface IEmployee
{
public decimal Salary { get; set; }
}
public class Employee
{
public decimal Salary { get; set; }
}
public extension MyPersonExtension extends Person : IEmployee
{
private static readonly ConditionalWeakTable<Person, Employee> _employees =
new ConditionalWeakTable<Person, Employee>();
public decimal Salary
{
get
{
// `this` is the instance of Person
return _employees.GetOrCreate(this).Salary;
}
set
{
Employee employee = null;
if (!_employees.TryGetValue(this, out employee)
{
employee = _employees.GetOrCreate(this);
}
employee.Salary = value;
}
}
}
IEmployee person = new Person();
var salary = person.Salary;
আংশিক শ্রেণীর মতো, তবে পৃথক সমাবেশে পৃথক শ্রেণি / টাইপ হিসাবে সংকলিত। দ্রষ্টব্য আপনি এইভাবে স্থির সদস্য এবং অপারেটরগুলি যুক্ত করতে সক্ষম হবেন। ম্যাডস টোরজেনসেন পডকাস্টে উল্লিখিত হিসাবে , এক্সটেনশনের কোনও রাজ্য থাকবে না (সুতরাং এটি শ্রেণিতে ব্যক্তিগত উদাহরণ সদস্যদের যোগ করতে পারে না) যার অর্থ আপনি উদাহরণের সাথে যুক্ত ব্যক্তিগত তথ্য ডেটা যুক্ত করতে পারবেন না । এর জন্য অনুরোধ করার কারণটি হ'ল অভ্যন্তরীণ অভিধানগুলি পরিচালনা করা বোঝায় এবং এটি কঠিন হতে পারে (মেমরি পরিচালনা, ইত্যাদি ...)। এর জন্য, আপনি এখনও পূর্বে বর্ণিত TypeDescriptor
/ ConditionalWeakTable
কৌশলটি ব্যবহার করতে পারেন এবং সম্পত্তি সম্প্রসারণ সহ, এটি একটি দুর্দান্ত সম্পত্তির আওতায় লুকিয়ে রাখেন।
সিনট্যাক্স এখনও এই বিষয় হিসাবে বোঝা হিসাবে পরিবর্তন সাপেক্ষে । উদাহরণস্বরূপ, এর extends
দ্বারা প্রতিস্থাপন করা যেতে পারে for
যা কিছুজন আরও প্রাকৃতিক এবং কম জাভা সম্পর্কিত অনুভব করতে পারে।
ডিসেম্বর 2018 আপডেট করুন - ভূমিকা, এক্সটেনশান এবং স্থির ইন্টারফেস সদস্য
এই গিটহাবের টিকিটের সমাপ্তি হিসাবে ব্যাখ্যা করা কিছু ত্রুটিগুলির কারণে এক্সটেনশান সবকিছু এটিকে সি # 8.0 তে পরিণত করেনি । সুতরাং, নকশা উন্নত করার জন্য একটি অনুসন্ধান ছিল। এখানে , ম্যাডস টরজেনসেন ব্যাখ্যা ও ভূমিকা কী কী এবং কীভাবে সেগুলি পৃথক করে তা ব্যাখ্যা করে :
ভূমিকা কোনও প্রদত্ত প্রকারের নির্দিষ্ট মানগুলিতে ইন্টারফেস প্রয়োগ করতে দেয়। এক্সটেনশানগুলি কোডের একটি নির্দিষ্ট অঞ্চলে প্রদত্ত প্রকারের সমস্ত মানগুলিতে ইন্টারফেস প্রয়োগ করতে দেয়।
এটি দুটি ব্যবহারের ক্ষেত্রে পূর্ববর্তী প্রস্তাবের বিভাজনে দেখা যায়। এক্সটেনশন জন্য নতুন বাক্য গঠন এই মত হবে:
public extension ULongEnumerable of ulong
{
public IEnumerator<byte> GetEnumerator()
{
for (int i = sizeof(ulong); i > 0; i--)
{
yield return unchecked((byte)(this >> (i-1)*8));
}
}
}
তাহলে আপনি এটি করতে সক্ষম হবেন:
foreach (byte b in 0x_3A_9E_F1_C5_DA_F7_30_16ul)
{
WriteLine($"{e.Current:X}");
}
এবং একটি স্ট্যাটিক ইন্টারফেসের জন্য :
public interface IMonoid<T> where T : IMonoid<T>
{
static T operator +(T t1, T t2);
static T Zero { get; }
}
এতে একটি এক্সটেনশন সম্পত্তি যুক্ত করুন int
এবং এর int
মতো আচরণ করুন IMonoid<int>
:
public extension IntMonoid of int : IMonoid<int>
{
public static int Zero => 0;
}