如何在C#中使用这样的东西。
Console.WriteLine("yaya instant");
Server.registerEvent(new Event(5000) {
public void doWork() {
this.stop();
Console.WriteLine("yaya 5 seconds later");
}
});
事件类和 doWork()方法在事件类中声明。
正在发生的事情是doWork()是抽象方法,它应该由上面的代码创建。
在C#中使用正确的语法是什么意思?甚至可以做这样的匿名方法吗? (如果有人不理解这个问题,上面的代码是无效的语法。)
谢谢,我感谢您的帮助。
答案 0 :(得分:0)
不,你不能这样做。 您需要创建一个接受操作的Event子类。
public class MyEvent: Event
{
private Action _action;
public MyEvent(int milliseconds, Action action)
: base(milliseconds)
{
_action= action;
}
public override void doWork()
{
action()
}
}
然后你可以这样做:
Server.registerEvent(new MyEvent(5000, () =>
{
this.stop();
Console.WriteLine("yaya 5 seconds later");
}));
你只需要声明MyEvent一次(称之为更好的东西),然后你可以在需要时用不同的动作创建它的实例。
答案 1 :(得分:0)
你不能在C#中拥有匿名类。那是你在问什么?但是在C#中,你通常不会实现一个用于处理事件的类。
答案 2 :(得分:0)
我能想到的最接近的是:
using System;
using System.Threading;
namespace SO6304593
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("yaya instant");
Thread t1 = new Thread(delegate(object x) { Thread.Sleep((int)x); Console.WriteLine("Hello 1");});
Thread t2 = new Thread(x => {Thread.Sleep((int)x); Console.WriteLine("Hello 2");});
t1.Start(5000);
t2.Start(3000);
t1.Join();
t2.Join();
}
}
}
这就是你追求的吗?以上是在C#中使用匿名方法的两个示例:委托语法和lambda语法。
答案 3 :(得分:0)
为您的事件类提供Action类型的属性:
public class Event
{
public Action doWork { get; set; }
}
然后使用如下:
Console.WriteLine("yaya instant");
Server.registerEvent(new Event(5000) {
doWork = delegate {
this.stop();
Console.WriteLine("yaya 5 seconds later");
}
});
答案 4 :(得分:0)
要实现方法注入,请在构造函数中将Action arg添加到Event,然后就可以这样做;
Console.WriteLine("yaya instant");
Server.registerEvent(
new Event(5000, () {
stop();
Console.WriteLine("yaya 5 seconds later");
)
);
Event::Event(int time, Action action){...}