2012-10-04 23 views
17

में "इंटरफेस के लिए स्ट्रक्चरल टंकण" क्या है टाइपप्रति के बारे में अपने blog post में, मार्क Rendle कह रहा है, कि चीजें वह इसके बारे में पसंद करती है में से एक है:।टाइपप्रति

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

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

+0

मैं इस संक्षिप्त पढ़ा है http://stackoverflow.com/questions/2831175/does-c-sharp- एक समकक्ष-से-स्केल-स्ट्रक्चरल-टाइपिंग जो इसे थोड़ा स्पष्ट करता है, लेकिन फिर भी यह जानना चाहेंगे कि इसका उपयोग टाइपस्क्रिप्ट में कैसे किया जाता है –

उत्तर

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 

कल्पना ज्यादा विस्तार से इस कवर नहीं करता है, लेकिन कक्षाएं "ब्रांडों" जिसका अर्थ है इंटरफेस के बजाय कक्षाओं के साथ लिखे गए एक ही कोड, में कोई त्रुटि होगी। सी # इंटरफेस में ब्रांड होते हैं, और इस प्रकार निहित रूप से परिवर्तित नहीं किया जा सकता है।

इसके बारे में सोचने का सबसे आसान तरीका यह है कि यदि आप इंटरफ़ेस एक्स से इंटरफ़ेस वाई में रूपांतरण करने का प्रयास कर रहे हैं, यदि एक्स में वाई के सभी सदस्य हैं, तो रूपांतरण सफल होता है, भले ही एक्स और वाई के समान नहीं हो नाम।

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

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

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

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

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