2011-11-14 27 views
7

La clase Thread es una clase sellada lo que significa que no se puede heredar de y necesito una instancia de Thread reutilizable que debe heredar de la clase Thread. ¿Alguien tiene una idea de cómo puedo reutilizar la banda de rodadura?¿No se puede heredar de una clase de subprocesos en C#?

+6

Prueba con la composición? – Erix

+1

¿Qué sentido tiene un hilo reablegable cuando un hilo no es reutilizable desde el punto de vista operativo? – TomTom

+0

¿Por qué no usas ThreadPool en su lugar? –

Respuesta

20

Como usted mismo ha anotado, Thread es una clase cerrada. Obviamente, esto significa que no puedes heredar de él. Sin embargo, puede crear su propia clase BaseThread que puede heredar y anular para proporcionar una funcionalidad personalizada usando 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 
    } 
} 

Se le ocurre la idea.

+0

¡Sí! ¡¡Déjame intentarlo!! – Xris

4

Una alternativa preferible al uso de herencia es usar Composición. Cree su clase y tenga un miembro del tipo Thread. Luego mapea los métodos de tu clase para llamar a los métodos del miembro Thread y agrega cualquier otro método que desees. Ejemplo:

public class MyThread 
{ 
    private Thread thread; 
    // constructors 

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

    // whatever else... 
} 
Cuestiones relacionadas