"इंटरफेस के लिए स्ट्रक्चरल टंकण" टाइपप्रति में क्या है

वोट
17

अपने में ब्लॉग पोस्ट टाइपप्रति के बारे में, मार्क Rendle कह रहा है, चीजों को वह पसंद के बारे में यह है की है कि एक:

इंटरफेस के लिए स्ट्रक्चरल टाइपिंग। मैं वास्तव में इच्छा सी # कर सकता है कि

उनका इससे क्या मतलब था?

04/10/2012 को 06:08
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
18

मूल रूप से, इसका मतलब है कि इंटरफेस एक "बतख टाइपिंग" के आधार पर करने के बजाय एक प्रकार पहचान आधार पर तुलना कर रहे हैं।

निम्नलिखित सी # कोड पर विचार करें:

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 इंटरफेस करने, अगर एक्स वाई के सभी सदस्य हैं, रूपांतरण सफल होता है, भले ही एक्स और वाई में एक ही नाम नहीं हो सकता है।

04/10/2012 को 06:29
का स्रोत उपयोगकर्ता

वोट
1

के बारे में सोचो।

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: = ...}
...

टाइपप्रति इस की अनुमति देगा, सी # नहीं होगा।

टाइपप्रति डोम "ढीला" टाइपिंग का उपयोग करता है के साथ अच्छी तरह से काम करना है, यह केवल समझदार टाइपप्रति के लिए चुनते हैं।

मैं यह पाठक पर छोड़ते अगर वे "स्ट्रक्चरल टाइपिंग" की तरह तय करने के लिए ... ..

12/02/2014 को 16:40
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more