2011-01-08 14 views
10

मैं एक NHibernate वर्ग परिभाषा इस पर हुआ:सी # असामान्य विरासत वाक्य रचना डब्ल्यू/जेनरिक

public class SQLiteConfiguration : PersistenceConfiguration<SQLiteConfiguration> 

तो इस वर्ग के एक आधार वर्ग कि द्वारा ... व्युत्पन्न वर्ग parameterized है से विरासत?       मेरा सिर बस विस्फोट हुआ।

क्या कोई यह बता सकता है कि इसका क्या अर्थ है और यह पैटर्न उपयोगी कैसे है?

(यह एक NHibernate विशिष्ट सवाल है, जिस तरह से नहीं है।)

+0

यह http://stackoverflow.com/questions/3783321/why-does-this-generic-constraint-compile-when-it-seems-to-have-a-circular-referen/3789193# का डुप्लिकेट है 3789193 –

+0

एरिक: मैंने लैम्बर्ट को अपनी टिप्पणियों में नीचे इस SO प्रश्न का हवाला दिया था। – anon

+0

मैंने थोड़ी देर पहले इस धागे को पढ़ा था, लेकिन केवल इस विशिष्ट परिदृश्य में आया था। मुझे "मेरे सिर बस विस्फोट" की खोज करके फिर से धागा मिला। जबरदस्त हंसी। अच्छी बात यह है कि आपने लिखा है या मैं इसे फिर कभी नहीं मिला होगा। :-) –

उत्तर

5
+0

हू। मैंने कभी सोचा नहीं था कि मैं खुद को विरासत वाक्यविन्यास पर जोर से हँसता हूं। यहां एक और एसओ सवाल है जो उपयोगी है: http://stackoverflow.com/questions/1327568/curiously-recurring-template-pattern-and-generics-constraints-c – anon

+0

यहां एक और अच्छी चर्चा है: http://stackoverflow.com/questions/3783321/क्यों होती है-इस-सामान्य-बाधा-संकलन जब यह लगता है करने के लिए है एक परिपत्र-जनमत संग्रह। इसके अलावा: http://fernandof.wordpress.com/2007/09/23/recursive-generics-restrictions/ – anon

2

मैं एक ही पैटर्न का इस्तेमाल किया है जब एक डबल जुड़ा हुआ पेड़ का विकास। प्रत्येक नोड 1 माता पिता, और 0-कई बच्चों

class Tree<T> where T : Tree<T> 
{ 
    T parent; 
    List<T> children; 
    T Parent { get; set; } 
    protected Tree(T parent) 
    { 
     this.parent = parent; 
     parent.children.Add(this); 
    } 
    // lots more code handling tree list stuff 
} 

कार्यान्वयन है

class Coordinate : Tree<Coordinate> 
{ 
    Coordinate(Coordinate parent) : this(parent) { } 
    static readonly Coordinate Root = new Coordinate(null); 
    // lots more code handling coordinate systems 
} 

उपयोग

Coordinate A = Coordinate.Root; 
Coordinate B = new Coordinate(A); 

B.Parent // returns a Coordinate type instead of a Node<>. 

तो कुछ भी है कि Tree<> से विरासत माता-पिता के लिए गुण और बच्चों में शामिल होंगे में वस्तुओं उपयुक्त प्रकार यह चाल मेरे लिए शुद्ध जादू है।

+0

बहुत विशिष्ट प्रतिक्रिया के लिए धन्यवाद, jalexiou! मुझे यह मानना ​​है कि इसे समझने में मुझे कुछ समय लगेगा। – anon

+0

@anon - इसे आज़माएं! पुराने सी # विकास और इस तरह कुछ कोड फायर। – ja72

+0

मैंने आपके कोड की कोशिश की, और यह संकलित नहीं हुआ = ( – anon

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