Dig*_*eUp 35 c# java multithreading interface
c#是否具有Java Runnable接口的等价物?
如果不是如何实施或根本不需要?
谢谢.
Osc*_*Ryz 54
c#是否具有Java Runnable接口的等价物?
是的,这是ThreadStart
class Runner
{
void SomeMethod()
{
Thread newThread = new Thread(new ThreadStart(Run));
newThread.Start();
}
public void Run()
{
Console.WriteLine("Running in a different thread.")
}
}
Run Code Online (Sandbox Code Playgroud)
等同于以下Java代码
class Runner implements Runnable {
void someMethod() {
Thread newThread = new Thread( this );
newThread.start();
}
public void run() {
out.println("Running in a different thread.");
}
}
Run Code Online (Sandbox Code Playgroud)
Fer*_*ran 28
不.C#以不同于Java的方式处理线程.您只需创建一个新的System.Threading.Thread对象并将其传递给ThreadStart委托(这是您执行工作的函数),而不是继承Thread类.
Dan*_*den 14
该ThreadStart委托是基本相同的Runnable接口.委托就像是单个方法而不是整个类的Runnable接口,因此它实际上比Java中的接口更容易实现.
MSDN 解释了代表们:
代理和接口类似,因为它们实现了规范和实现的分离.多个独立作者可以生成与接口规范兼容的实现.类似地,委托指定方法的签名,作者可以编写与委托规范兼容的方法.什么时候应该使用接口,什么时候应该使用委托?
代表在以下情况下很有用:
- 正在调用一种方法.
- 类可能希望具有方法规范的多个实现.
- 期望允许使用静态方法来实现规范.
- 需要类似事件的设计模式(有关更多信息,请参阅"事件教程").
- 调用者无需知道或获取定义该方法的对象.
- 实现的提供者希望将规范的实现"分发"给仅少数选择的组件.
- 需要容易的组合物.
接口在以下情况下很有用:
- 规范定义了一组将被调用的相关方法.
- 类通常只实现一次规范.
- 接口的调用者想要转换为接口类型或从接口类型转换为获取其他接口或类.
C#使用ThreadStart委托而不是Java的Runnable样式.
public class Foo
{
public void DoStuff()
{
while (true)
{
// do some stuff
}
}
};
public class Bar
{
public static int Main()
{
Foo foo = new Foo();
// create a ThreadStart delegate and pass in the method that will run
// (similar to run on Java's Runnable)
Thread thread = new Thread(new ThreadStart(foo.DoStuff));
thread.Start();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37493 次 |
| 最近记录: |