2011-01-21 17 views
8

क्या को जोड़ने के लिए सी # में कोई तरीका है अन्य असेंबली में पहले से परिभाषित प्रकारों के रूपांतरण?सी # मौजूदा प्रकारों में आरोपी रूपांतरण जोड़ना

उदाहरण के लिए, यदि मैं दो अलग-अलग असेंबली का उपयोग कर रहा हूं, जो प्रत्येक अपने Vector3 struct प्रदान करते हैं, और इसे अपने एपीआई में उपयोग करते हैं, तो एक बार रूपांतरण को परिभाषित करने में सक्षम होना अच्छा होगा, और फिर बस Foo.Vector3 को विधि में पास करें जो Bar.Vector3 की अपेक्षा करता है, और इसे स्वचालित रूप से परिवर्तित कर दिया गया है।

यदि मेरे पास पुस्तकालयों का स्रोत था तो मैं निहित रूपांतरण ऑपरेटर जोड़ सकता था। उस स्रोत के बिना, मैं वर्तमान में हर समय एक सहायक समारोह के साथ स्वयं रूपांतरण कर रहा हूं। मैं एक अच्छे तरीके की उम्मीद कर रहा हूं।

मुझे पता है मैं अपने खुद के Vector3 struct करने और अन्य दो structs से अंतर्निहित रूपांतरण ऑपरेटरों के साथ बना सकते हैं, लेकिन यह सभी मामलों में जहां मैं करना चाहते हैं का समाधान नहीं होता सीधे की एक वस्तु पारित एक (बाह्य रूप में परिभाषित किया गया) टाइप दूसरे की उम्मीद एक विधि के लिए।

बोनस सवाल: पुस्तकालयों कि उनके एपीआई में एक Vector3 struct जैसी चीजों का पर्दाफाश इस संबंध में उपयोग में आसानी की सुविधा के लिए क्या करना चाहिए की क्या लेखकों है?

+0

एक्सटेंशन ऑपरेटर .. मुझे यह पसंद है :) – nawfal

उत्तर

10

आप किसी तीसरे पक्ष के प्रकार से किसी भी प्रकार के लिए निहित रूपांतरण प्रदान कर सकते हैं, जिसे आप स्वयं लिखते हैं, लेकिन आप दो तृतीय-पक्ष प्रकारों के बीच अंतर्निहित रूपांतरण के लिए समर्थन नहीं जोड़ सकते हैं।

आप वेक्टर 3 प्रकार दोनों में विस्तार विधियों को जोड़कर कुछ प्रकार के बीच परिवर्तित करने की लालित्य में सुधार कर सकते हैं;

public static Bar.Vector3 ToBarVector3(this Foo.Vector3 foo) { 
    return /* instance of Bar.Vector3 */ 
} 

public static Foo.Vector3 ToFooVector3(this Bar.Vector3 bar) { 
    return /* instance of Foo.Vector3 */ 
} 

यह सबसे अच्छा है जिसे आप प्राप्त करने की उम्मीद कर सकते हैं।

2

दुर्भाग्यवश आप उन परिवर्तनों को जोड़ नहीं सकते जो उस प्रकार से और उस प्रकार से परिवर्तित हो जाते हैं जिसे आप नहीं बदल सकते हैं। मैंने आपके द्वारा उल्लिखित कार्यवाही की सिफारिश की होगी, लेकिन आपने पहले ही इसका उल्लेख किया है :)।

मुझे डर है कि आपके बोनस प्रश्न का उत्तर भी "आप नहीं कर सकते"।

संबंधित मुद्दे