अपने में ब्लॉग पोस्ट टाइपप्रति के बारे में, मार्क Rendle कह रहा है, चीजों को वह पसंद के बारे में यह है की है कि एक:
इंटरफेस के लिए स्ट्रक्चरल टाइपिंग। मैं वास्तव में इच्छा सी # कर सकता है कि
उनका इससे क्या मतलब था?
अपने में ब्लॉग पोस्ट टाइपप्रति के बारे में, मार्क Rendle कह रहा है, चीजों को वह पसंद के बारे में यह है की है कि एक:
इंटरफेस के लिए स्ट्रक्चरल टाइपिंग। मैं वास्तव में इच्छा सी # कर सकता है कि
उनका इससे क्या मतलब था?
मूल रूप से, इसका मतलब है कि इंटरफेस एक "बतख टाइपिंग" के आधार पर करने के बजाय एक प्रकार पहचान आधार पर तुलना कर रहे हैं।
निम्नलिखित सी # कोड पर विचार करें:
interface X1 { string Name { get; } }
interface X2 { string Name { get; } }
// ... later
X1 a = null;
X2 b = a; // Compile error! X1 and X2 are not compatible
और बराबर टाइपप्रति कोड:
interface X1 { name: string; }
interface X2 { name: string; }
var a: X1 = null;
var b: X2 = a; // OK: X1 and X2 have the same members, so they are compatible
कल्पना ज्यादा विस्तार से इस कवर नहीं करता है, लेकिन कक्षाएं "ब्रांडों" जो एक ही कोड, इंटरफेस के बजाय वर्गों के साथ लिखा है इसका मतलब है, होगा एक त्रुटि की है। सी # इंटरफेस ब्रांडों की क्या ज़रूरत है, और इस तरह परोक्ष नहीं बदला जा सकता।
सबसे आसान तरीका है इसके बारे में सोचने के लिए है कि आप इंटरफ़ेस एक्स से एक रूपांतरण का प्रयास कर रहे है, तो Y इंटरफेस करने, अगर एक्स वाई के सभी सदस्य हैं, रूपांतरण सफल होता है, भले ही एक्स और वाई में एक ही नाम नहीं हो सकता है।
के बारे में सोचो।
class Employee { fire: = ..., otherMethod: = ...}
class Missile { fire: = ..., yetMoreMethod: = ...}
interface ICanFire { fire: = ...}
val e = new Employee
val m = new Missile
ICanFire bigGuy = if(util.Random.nextBoolean) e else m
bigGuy.fire
क्या होगा अगर हम ने कहा:
interface IButtonEvent { fire: = ...}
interface IMouseButtonEvent { fire: = ...}
...
टाइपप्रति इस की अनुमति देगा, सी # नहीं होगा।
टाइपप्रति डोम "ढीला" टाइपिंग का उपयोग करता है के साथ अच्छी तरह से काम करना है, यह केवल समझदार टाइपप्रति के लिए चुनते हैं।
मैं यह पाठक पर छोड़ते अगर वे "स्ट्रक्चरल टाइपिंग" की तरह तय करने के लिए ... ..