2011-11-14 11 views
7

クラスThreadは、継承できないという意味の密封クラスです。スレッドクラスを継承する再利用可能なThreadのインスタンスが必要です。誰かがどのようにトレッドを再利用できるか考えていますか?C#のスレッドクラスから継承できませんか?

+6

試してみますか? – Erix

+1

スレッドが動作の観点から再利用できない場合、再開可能なスレッドはどのような意味を持っていますか? – TomTom

+0

代わりにThreadPoolを使わないのはなぜですか? –

答えて

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... 
} 
関連する問題