2011-11-14 14 views
7

कक्षा Thread एक मुहरबंद वर्ग है जिसका अर्थ है कि इसे विरासत में नहीं लिया जा सकता है और मुझे एक पुन: प्रयोज्य Thread का उदाहरण चाहिए जो थ्रेड वर्ग से प्राप्त होना चाहिए। क्या किसी के पास कोई विचार है कि मैं कैसे चल सकता हूं?सी # में थ्रेड क्लास से प्राप्त करने में असमर्थ?

+6

संरचना का प्रयास करें? – Erix

+1

एक पुन: उपयोग करने योग्य धागा क्या करता है जब थ्रेड ऑपरेटिंग बिंदु से पुन: प्रयोज्य नहीं होता है? – TomTom

+0

आप इसके बजाय थ्रेडपूल का उपयोग क्यों नहीं करते? –

उत्तर

20

के रूप में आप अपने आप को बताया गया है, Thread एक सील बंद वर्ग है। जाहिर है इसका मतलब है कि आप इससे प्राप्त नहीं कर सकते हैं। हालांकि, आप अपना खुद का BaseThread वर्ग बना सकते हैं जिसे आप Composition का उपयोग करके कस्टम कार्यक्षमता प्रदान करने के लिए उत्तराधिकारी और ओवरराइड कर सकते हैं।

abstract class BaseThread 
{ 
    private Thread _thread; 

    protected BaseThread() 
    { 
     _thread = new Thread(new ThreadStart(this.RunThread)); 
    } 

    // Thread methods/properties 
    public void Start() => _thread.Start(); 
    public void Join() => _thread.Join(); 
    public bool IsAlive => _thread.IsAlive; 

    // Override in base class 
    public abstract void RunThread(); 
} 

public MyThread : BaseThread 
{ 
    public override void RunThread() 
    { 
     // Do some stuff 
    } 
} 

आपको यह विचार मिलता है।

+0

हाँ! मुझे कोशिश करने दो !! – Xris

4

विरासत का उपयोग करने के लिए एक बेहतर विकल्प संरचना का उपयोग करना है। अपनी कक्षा बनाएं और Thread टाइप करें। फिर थ्रेड सदस्य से विधियों को कॉल करने के लिए अपनी कक्षा के तरीकों को मानचित्र करें और अपनी इच्छानुसार किसी अन्य विधि को जोड़ें। उदाहरण:

public class MyThread 
{ 
    private Thread thread; 
    // constructors 

    public void Join() 
    { 
     thread.Join(); 
    } 

    // whatever else... 
} 
संबंधित मुद्दे