স্ট্যাটিক ইমপ্লিট অপারেটর


157

আমি সম্প্রতি এই কোডটি পেয়েছি:

 public static implicit operator XElement(XmlBase xmlBase)
 {
     return xmlBase.Xml;
 }

কী static implicit operatorমানে?

উত্তর:


262

এটি একটি রূপান্তর অপারেটর । এর অর্থ হল আপনি এই কোডটি লিখতে পারেন:

XmlBase myBase = new XmlBase();
XElement myElement = myBase;

এবং সংকলক অভিযোগ করবে না! রানটাইম এ, রূপান্তরকারী অপারেটর কার্যকর করা হবে - myBaseযুক্তি হিসাবে পাস , এবং XElementফলাফল হিসাবে একটি বৈধ ফেরত ।

বিকাশকারী হিসাবে এটি আপনার জন্য সংকলককে বলার একটি উপায়:

"যদিও এগুলি দুটি সম্পূর্ণ অপ্রাসঙ্গিক প্রকারের মতো দেখায়, বাস্তবে এক থেকে অন্যটিতে রূপান্তরিত করার উপায় আছে; কীভাবে এটি করা যায় তার জন্য আমাকে যুক্তিটি পরিচালনা করতে দিন।"


11
+1 টি। আমি যুক্ত করব যে অন্তর্নিহিত রূপান্তরটির মাঝে মাঝে ভাল ব্যবহারের সময় এটি অদ্ভুত / আশ্চর্যজনক বাগগুলি সৃষ্টি করতে পারে এবং একজন (মানব) এপিআই ব্যবহারকারীকে বিভ্রান্ত করতে পারে। উদাহরণস্বরূপ, ছাত্রলীগে অন্তর্নিহিত রূপান্তরগুলির খুব কম ব্যবহার রয়েছে। বিচক্ষণতার সাথে ব্যবহার করুন!
ড্রয় নোকস

13

এ ধরনের অন্তর্নিহিত অপারেটর মানে কি রূপান্তর করতে পারেন XmlBaseথেকে XElementপরোক্ষভাবে।

XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;   
//no explicit convert here like: XElement xelement = (XElement)xmlBase;

এই সুস্পষ্ট রূপান্তর যাইহোক কাজ করতে পারেন? XElement xelement = (XElement)xmlBase;প্রশ্নে এটি বলে static, এটি অচল থাকতে হবে কি? এটি কি স্থির নয়, তাই এটি তাত্ক্ষণিকভাবে চালু করা যেতে পারে?
উচ্চাভিলাষী

6

আর একটি আকর্ষণীয় ব্যবহার হ'ল (কোন ইউনিট কোন বস্তুটি (এবং সেইজন্য মনোবিহেভিয়ারের উদাহরণ) নাল কিনা তা পরীক্ষা করে দেখার জন্য করেছে):

public static implicit operator bool (CustomClass c)
{
    return c != null;
}

নোট করুন যে কোডটি ক্লাসের মধ্যে থাকতে হবে (এক্ষেত্রে কাস্টমক্লাস)। এইভাবে আপনি এই জাতীয় কিছু করতে পারেন:

void Method ()
{
    CustomClass c1 = null;
    CustomClass c2 = new CustomClass ();

    bool b1 = c1; // is false
    bool b2 = c2; // is true

    if (!c1 && c2)
    {
        // Do stuff
    }
}

স্পষ্টতই সর্বাধিক কুখ্যাত ব্যবহার এটি আপনার ক্লাসগুলির মধ্যে একটিকে আপনার ক্লাসের অন্য একটিতে রূপান্তর করতে ব্যবহার করছে। তবে তাদেরকে মৌলিক ধরণের সাথে ব্যবহার করাও বিবেচনার জন্য মূল্যবান ... এবং আমি এটি খুব কমই উল্লেখ করেছি see


1
দুর্দান্ত কৌশল! একটি বিষয় উল্লেখ্য: static implicit operator boolপদ্ধতি ঘোষণা করা আবশ্যক ভিতরেCustomClass । আমি ডেমো উদ্দেশ্যে এটির জন্য একটি ডটনেটফিট তৈরি করেছি ।
ম্যাট

1
@ ম্যাট - আহ, আমার উত্তর এতক্ষণে 2 বছর পুরানো। আমি কোডটি কিছুটা আপডেট করেছি এবং আপনার ইঙ্গিতটি যুক্ত করেছি।
যুদ্ধ

4

এটি একটি অন্তর্নিহিত রূপান্তর অপারেটর (স্পষ্টত অপারেটরের বিপরীতে, যার (type)রূপান্তর বাক্য গঠন প্রয়োজন)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.