无法从c#中的线程类继承

本文关键字:线程 继承 | 更新日期: 2023-09-27 18:14:25

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

无法从c#中的线程类继承

正如您自己所指出的,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
    }
}

你懂的。

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

public class MyThread 
{
    private Thread thread;
    // constructors
    public void Join()
    {
        thread.Join();
    }
    // whatever else...
}