Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从C#中的线程类继承?_C# - Fatal编程技术网

无法从C#中的线程类继承?

无法从C#中的线程类继承?,c#,C#,类Thread是一个密封的类,这意味着它不能从中继承,我需要一个可重用的Thread实例,它应该从Thread类继承。有人知道如何重用tread吗?使用继承的更好替代方法是使用组合。创建您的类并拥有类型为Thread的成员。然后将类的方法映射为从线程成员调用方法,并添加您可能需要的任何其他方法。例如: public class MyThread { private Thread thread; // constructors public void Join()

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

使用继承的更好替代方法是使用组合。创建您的类并拥有类型为
Thread
的成员。然后将类的方法映射为从线程成员调用方法,并添加您可能需要的任何其他方法。例如:

public class MyThread 
{
    private Thread thread;
    // constructors

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

    // whatever else...
}

正如您自己所指出的,
Thread
是一个密封的类。显然,这意味着你不能从中继承。但是,您可以创建自己的
BaseThread
类,您可以使用继承和重写该类来提供自定义功能


你明白了。

试试组合?当线程从操作角度来看不可重用时,可恢复线程有什么意义?为什么不改用ThreadPool?这不关我的事,但你会做一些可怕和危险的事情。考虑与社区共享你的主要问题,我确信我们可以找到更好的解决方案。
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
    }
}