using System;
using System.Threading;
public class pgm
{
public static void Main()
{
Thread newThread = new Thread(pgm.work1);
newThread.Start(20);
pgm p = new pgm();
newThread = new Thread(p.work2);
newThread.Start("Instance");
Console.ReadLine();
}
public static void work1(object data)
{
Console.WriteLine("Static Thread Procedure : Data ='{0}'",data);
}
public void work2(object data)
{
Console.WriteLine("Instance Thread Procedure : Data ='{0}'", data);
}
}
当我将work1和work2方法的参数写为“ int数据”和“ string数据”时,将引发类型不匹配错误。为什么?
答案 0 :(得分:-1)
您使用的Thread
的构造函数具有以下签名:
public Thread(ParameterizedThreadStart start)
ParameterizedThreadStart
是具有以下签名的委托人:
public delegate void ParameterizedThreadStart(object obj)
因此,当您尝试启动方法void work1(object data)
和void work2(object data)
时,它们与该签名匹配,因此可以正常工作。
但是当您将它们更改为void work1(int data)
和void work2(string data)
时,它们将不匹配,编译器会让您知道。
如果您可以做自己想做的事情,那么可能会这样做:
Thread newThread = new Thread(pgm.work1);
newThread.Start("Some String"); //but `pgm.work1` takes an `int`!
这将导致运行时间异常。编译器的一部分工作是防止您犯这样的错误。因此,这是一个编译时错误。