Tom*_*ter 0 .net c# generics multithreading
当在一个单独的线程上运行的方法中更改对象时,该对象不会在调用线程(启动该方法运行的线程的线程)上更改.但是,如果定义该对象的类是通用的,则该对象在调用线程上被更改.例如:
我有两节课:
public class Holder<T> { public T Value {get;set;} }
Run Code Online (Sandbox Code Playgroud)
和
public class Holder2 { public String Value {get;set;} }
Run Code Online (Sandbox Code Playgroud)
我有一个名为client的第三个对象,它在方法Change()上将Value设置为在单独的线程上不同的值:
static void main(string[] args)
{
Holder<String> test = new Holder<String>();
test.Set("original");
Client client = new client(test);
client.Change(test);
Console.WriteLine(test.Value);
// test.Value now returns "changed"
// But if test was of type Holder2, it would return "original"
}
Run Code Online (Sandbox Code Playgroud)
基本上客户端做的是:
public class Client
{
Holder<String> test;
public Client(Holder<String> test)
{
this.test = test;
}
public void Change()
{
ThreadStart ts = new ThreadStart(Alter);
Thread t = new Thread(ts);
t.Start();
}
public void Alter()
{
test.Value = "changed";
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我更改Client类而不是Holder2,这不是通用的,它不再起作用.也就是说,test.Value将返回"原始".任何人都可以向我解释,为什么会这样?
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |