我是一名Java程序员,试图转换到C#,我希望有一种方法可以在C#中做一些我在Java中习惯的方法:在抽象对象的声明中覆盖一个方法,如:
//This is the way I do it in Java and want to do in C#
Keyword k = new Keyword("quit"){
public abstract void do(String context){
//TODO Do stuff
}
};
这是我在Java中用了一段时间做的一些文字游戏的东西。我已经研究过抽象的,虚拟的和匿名的类,但是没有一个完成这个。抽象和虚拟想要我创建一个全新的子类,但这将耗费大量时间并且不可行。匿名类没有(据我所知)使我能够覆盖方法,只是字段,并且不能为我提供任何稳定的依赖。
如果有办法做到这一点或类似的东西请解释。谢谢你的时间。
答案 0 :(得分:3)
这在C#中不起作用。您必须创建一个继承自关键字的新类。
public class MyKeyword : Keyword
{
public MyKeyword(string s) : base(s)
{ }
public override void do(string context)
{
// TODO: Do stuff.
}
}
C#中的Anonymous Types不是您可以提供任何公共方法的类。它们只有属性,并且是一种快速的方法内方法,可以将复杂数据从一行变为另一行。
说实话,我不知道你可以做你在Java中展示的东西。也就是说,如果我将其理解为一种内联类派生。
Brian Rasmussen提到使用delegate。这看起来像这样:
public delegate void DoSomething(string context);
public class Keyword
{
public DoSomething Do;
private void CallsDo()
{
if (Do != null) Do("some string");
}
}
然后你可以分配给它:
Keyword k = new Keyword();
k.Do = (ctx) => { /* Do something with ctx string */ };
答案 1 :(得分:0)
Delegates可能就是你所追求的。
答案 2 :(得分:0)
您可以使用此方法的委托:请注意示例
public class Keyword
{
public delegate void Do();
}
//Area of Execution
{
//...
Keyword k = new Keyword();
k.Do = delegate()
{
Console.Writeln("Anonymous Inner function assigned to a callback function i.e a Delegate!");
};
}
这些与C / C ++中的函数指针非常相似,但根据您的背景,这可能对您没有任何意义。
最简单的说,委托是一个封装方法/函数的类型安全对象。这意味着它维护对方法或方法的引用,并且可以稍后通过委托对象而不是显式地在方法本身上调用它们。您可以将右侧的匿名函数分配给您所描述的Java中的方法。
希望这会有所帮助。在此深入了解代表们的详细信息