दिलचस्प पोस्ट
Cx_freeze का उपयोग करते समय मैं अन्य फ़ाइलों को कैसे बंडल कर सकता हूं? Google क्रोम फॉर्म स्वत: भरण और इसके पीले रंग की पृष्ठभूमि मैं कमांड लाइन से आईओएस सिम्युलेटर को कैसे रीसेट कर सकता हूं? संपूर्ण एंड्रॉइड ऐप के लिए डिफॉल्ट फ़ॉन्ट परिवार कैसे सेट करें पाठ फ़ाइल की अंतिम पंक्ति को तुरंत पढ़ें? विंडोज पर पायथन 2.7 के लिए बिल्डिंग एलएक्सएमएल आईफ़ोन एसडीके में ग्रिड दृश्य तेज 3 से परिवर्तित होने के बाद अजीब जेनेरिक फ़ंक्शन दृश्य नियंत्रक में दिखाई देता है जावास्क्रिप्ट का उपयोग कर पार्स XML मॉकिटो का उपयोग करके निजी विधि का परीक्षण करना कुकीज़ के बिना PHP सत्र मुझे कैसे पता चलेगा कि SKSpriteNode को छुआ गया है जीसीसी में स्थिर और गतिशील रूप से जुड़े लाइब्रेरी दोनों का उपयोग करें हर प्रोग्रामर को पढ़ना चाहिए एकल सबसे प्रभावशाली पुस्तक क्या है? केवल पंक्तियों द्वारा एसक्यूएल समूह जो अनुक्रम में हैं

सी # समर्थन वापसी प्रकार सह प्रकार है?

मैं .NET ढांचे के साथ काम कर रहा हूं और मैं वास्तव में एक कस्टम प्रकार का पृष्ठ बनाने में सक्षम होना चाहता हूं जो मेरी सभी वेबसाइट का उपयोग करता है। समस्या तब आती है जब मैं एक नियंत्रण से पृष्ठ का उपयोग करने की कोशिश कर रहा हूं। मैं डिफ़ॉल्ट पृष्ठ के बजाय अपने विशिष्ट पृष्ठ के पृष्ठ को वापस करने में सक्षम होना चाहता हूं। क्या इसे करने का कोई तरीका है?

public class MyPage : Page { // My own logic } public class MyControl : Control { public MyPage Page { get; set; } } 

वेब के समाधान से एकत्रित समाधान "सी # समर्थन वापसी प्रकार सह प्रकार है?"

ऐसा लगता है कि आप क्या चाहते हैं, वापसी प्रकार सह प्रकार हैं सी # रिटर्न प्रकार सहकारिता का समर्थन नहीं करता है

वापसी प्रकार सह-प्रकार है, जहां आप एक आधार क्लास विधि को ओवरराइड करते हैं जो एक विशिष्ट विशेष प्रकार के साथ कम विशिष्ट प्रकार देता है:

 abstract class Enclosure { public abstract Animal Contents(); } class Aquarium : Enclosure { public override Fish Contents() { ... } } 

यह सुरक्षित है क्योंकि संलग्नक के माध्यम से सामग्री के उपभोक्ता एक पशु की अपेक्षा करते हैं, और एक्वेरियम ने न केवल उस आवश्यकता को पूरा करने का वादा किया है, बल्कि इसके अलावा, अधिक सख्त वादा करने के लिए: यह जानवर हमेशा एक मछली है।

इस प्रकार का संप्रभु C # में समर्थित नहीं है, और कभी समर्थित नहीं होने की संभावना नहीं है। यह सीएलआर द्वारा समर्थित नहीं है (यह सी ++ द्वारा समर्थित है, और सीएलआर पर सी + + / सीएलआई कार्यान्वयन द्वारा, ऐसा लगता है कि मैं नीचे दिए गए सुझावों के जादुई सहायक विधियों को पैदा कर रहा हूं।)

(कुछ भाषाओं औपचारिक पैरामीटर प्रकार भ्रमभ्रष्टता के साथ-साथ समर्थन भी करते हैं – आप एक ऐसी विधि को ओवरराइड कर सकते हैं जो एक ऐसी विधि से मछली लेती है जो एक पशु को लेती है। फिर से, अनुबंध पूरा हो गया है, आधार वर्ग के लिए आवश्यक है कि किसी भी मछली को संभाला जाए और व्युत्पन्न किया जाए वर्ग केवल न केवल मछली को संभाल करने का वादा करता है, बल्कि किसी भी जानवर से होता है। इसी प्रकार, सी # और सीएलआर औपचारिक पैरामीटर प्रकार भ्रष्टाचार का समर्थन नहीं करते हैं।)

जिस तरह से आप इस सीमा के आसपास काम कर सकते हैं, ऐसा कुछ करना है:

 abstract class Enclosure { protected abstract Animal GetContents(); public Animal Contents() { return this.GetContents(); } } class Aquarium : Enclosure { protected override Animal GetContents() { return this.Contents(); } public new Fish Contents() { ... } } 

अब आपको एक आभासी पद्धति को ओवरराइड करने का लाभ मिलता है, और कंपाइल-टाइम प्रकार एक्वेरियम के कुछ उपयोग करते समय अधिक शक्तिशाली टाइपिंग मिलती है

यह MyControl ऑब्जेक्ट में रखकर काम करेगा:

  public new MyPage Page {get return (MyPage)Page; set;}' 

आप संपत्ति को ओवरराइड नहीं कर सकते क्योंकि यह एक अलग प्रकार देता है … लेकिन आप इसे फिर से परिभाषित कर सकते हैं।

इस उदाहरण में आपको सहानुभूति की आवश्यकता नहीं है, क्योंकि यह अपेक्षाकृत सरल है। आप जो कर रहे हैं वह MyPage से मूल ऑब्जेक्ट Page को प्राप्त कर रहा है। किसी भी Control जो आप Page बजाय MyPage को वापस करना चाहते हैं, को Control की Page संपत्ति को फिर से परिभाषित करने की आवश्यकता है

इस ब्लॉग पोस्ट सीरीज़ में वापसी प्रकार के सहप्रवाह के मुद्दे पर विस्तार से चर्चा की गई है, यहां तक ​​कि आईएल के साथ यह कैसे करना है इसके बारे में बात करना।

http://www.simple-talk.com/community/blogs/simonc/archive/2010/07/14/93495.aspx

http://www.simple-talk.com/community/blogs/simonc/archive/2010/07/16/93516.aspx

http://www.simple-talk.com/community/blogs/simonc/archive/2010/07/19/93562.aspx

बस लिंक पोस्ट करने के लिए क्षमा करें, लेकिन यह काफी विस्तृत है और यहां स्निपेट का उद्धरण उपयोगी नहीं होगा। यह दर्शाता है कि आईएल कोड का उपयोग कैसे किया जा सकता है।

हां, यह सहप्रयोजन का समर्थन करता है, लेकिन यह उस सटीक चीज़ पर निर्भर करता है जिसे आप प्राप्त करने की कोशिश कर रहे हैं।

मैं चीज़ों के लिए जेनेरिक का भी इस्तेमाल करता हूं, जिसका अर्थ है कि जब आप ऐसा करते हैं:

 class X<T> { T doSomething() { } } class Y : X<Y> { Y doSomethingElse() { } } var Y y = new Y(); y = y.doSomething().doSomethingElse(); 

और अपने प्रकार "खो" नहीं

मैंने इसे करने की कोशिश नहीं की, लेकिन यह काम नहीं करता है?

 YourPageType myPage = (YourPageType)yourControl.Page; 

हाँ। ऐसा करने के कई तरीके हैं, और यह सिर्फ एक विकल्प है:

आप अपने पृष्ठ को कुछ कस्टम इंटरफ़ेस लागू कर सकते हैं जो "GetContext" नामक एक विधि को प्रदर्शित करता है या कुछ और, और यह आपकी विशिष्ट जानकारी देता है। फिर आपका नियंत्रण पृष्ठ और कलाकारों का अनुरोध कर सकता है:

 var myContextPage = this.Page as IMyContextGetter; if(myContextPage != null) var myContext = myContextPage.GetContext(); 

तब आप उस संदर्भ का प्रयोग कर सकते हैं, लेकिन आप चाहते हैं।

आप माता-पिता के पेड़ को चलकर किसी भी नियंत्रण से अपने पृष्ठ तक पहुंच सकते हैं। अर्थात्

 myParent = this; while(myParent.parent != null) myParent = myParent.parent; 

* संकलित या परीक्षण नहीं किया

या वर्तमान संदर्भ में पैरेंट पृष्ठ प्राप्त करें (आपके संस्करण पर निर्भर करता है)।


तो मुझे क्या करना पसंद है: मैं नियंत्रण में उपयोग करने वाले फ़ंक्शंस के साथ एक इंटरफ़ेस बना देता हूं (उदाहरण के लिए IHostingPage)

फिर मैंने माता-पिता पृष्ठ 'IHostingPage host = (IHostingPage) जनक डाली;' और मैं अपने नियंत्रण से पृष्ठ की जरूरत के लिए फ़ंक्शन को कॉल करने के लिए तैयार हूं।

मैं इसे इस तरह करेगा:

 class R { public int A { get; set; } } class R1: R { public int B { get; set; } } class A { public RX { get; set; } } class B : A { private R1 _x; public new R1 X { get => _x; set { ((A)this).X = value; _x = value; } } } 

इंटरफेस को स्पष्ट रूप से कार्यान्वित करके इंटरफेस के साथ मिलकर मुझे मिला:

 public interface IFoo { IBar Bar { get; } } public class Foo : IFoo { Bar Bar { get; set; } IBar IFoo.Bar => Bar; }