无法从C#中的Thread类继承?

时间:2011-11-14 14:59:54

标签: c#

Thread是一个密封类,意味着它不能继承而且我需要一个可重用的Thread实例,它应该继承自 Thread 类。有谁知道如何重复使用胎面?

2 个答案:

答案 0 :(得分:23)

正如您自己所说,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 MyThread()
        : base()
    {
    }

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

你明白了。

答案 1 :(得分:4)

使用继承的一个更好的替代方法是使用Composition。创建您的类并拥有类型为Thread的成员。然后映射类的方法以从Thread成员调用方法并添加您可能希望的任何其他方法。例如:

public class MyThread 
{
    private Thread thread;
    // constructors

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

    // whatever else...
}