[c#] सुरक्षित डाउनकास्टिंग के उपयोग से कक्षा डिजाइन के लिए विकल्प


0 Answers

आपके उदाहरण का केवल लापता भाग यह है कि नियोक्ता उपयोगकर्ता से वारिस नहीं करता है

अपनी घोषणा को इसमें बदलें:

public partial class Employer : User
{
    // ...
}

और तुम जाने के लिए अच्छा होना चाहिए। मुझे यकीन नहीं है कि मैं इस मार्ग पर हालांकि जाना होगा। मैं संभवतः बस मेरा कास्टिंग सुरक्षित as कीवर्ड के as उपयोग करूँगा:

var user = GetUser();
var employer = user as Employer;

// if the cast failed, employer will be null
if(employer != null)
{
    // Work with employer
}
Question

डाउनकास्टिंग के साथ संघर्ष करने के बाद ( [मेरी मूल पोस्ट] देखें ) और [गहरी प्रतियां] बनाने के बाद , मैंने पाया [इस उपनाम लेख] जहां इस मुद्दे से निपटने के तरीके के रूप में सी ++ में सुझाव दिया गया है। बहुत उत्तेजना के साथ मैंने इसे सी # में निम्नानुसार कार्यान्वित किया:

public partial class User
{
virtual public Employer GetEmployer() { return null; }
...
}

public partial class Employer
{
public override Employer GetEmployer() { return this; }
...
}

जो मैंने तब इस तरह इस्तेमाल किया:

User u = GetUser();
Employer e = u.GetEmployer();

हालांकि (मुझे लगता है, आश्चर्य की बात नहीं), ओवरराइड कभी नहीं कहा जाता है और एक रिक्त लौटा है।

मैं जिस समस्या को हल करने की कोशिश कर रहा हूं वह है जो मैं इकट्ठा करता हूं वह बहुत ही आम उपयोग होगा-मामले: मुझे थोड़ा सा डेटा प्राप्त होता है जो मुझे स्टोर करना है लेकिन यह अधूरा है बाद में मुझे अधिक जानकारी मिलती है और मैं इसे दुनिया के बारे में समझने के लिए इसका इस्तेमाल करता हूं (निराश्रित)

इस विशेष मामले में, मुझे अपनी वेबसाइट का उपयोग करने वाले किसी व्यक्ति से ई-मेल पता मिलता है, इसलिए मुझे पता है कि वे User , लेकिन सामान्य तौर पर मुझे उनके बारे में कुछ और नहीं पता है। बाद में (जब वे एक फॉर्म भरें), मुझे पता है कि वे वास्तव में एक Employer , इसलिए मुझे अपने User को घृणा करने की आवश्यकता है

सही दृष्टिकोण क्या है?




Related