1

我是一名试图过渡到 C# 的 Java 程序员,我希望有一种方法可以在 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 中已经做了一段时间的一些文本游戏的东西。我研究了抽象类、虚拟类和匿名类,但它们都没有做到这一点。抽象和虚拟希望我创建一个全新的子类,但这将非常耗时且大规模不可行。匿名类不(据我所知)使我能够覆盖方法,只是字段并且不提供任何稳定供我依赖。

如果有办法做到这一点或类似的事情,请解释。谢谢你的时间。

4

3 回答 3

3

这在 C# 中不起作用。您必须创建一个继承自关键字的新类。

public class MyKeyword : Keyword
{
    public MyKeyword(string s) : base(s)
    { }

    public override void do(string context)
    {
        // TODO: Do stuff.
    }
}

C# 中的匿名类型不是您可以为其提供任何公共方法的类。它们只有属性,旨在成为一种快速的方法内方法,将复杂数据从一行传递到下一行。

老实说,我不知道你可以做你在 Java 中展示的东西。也就是说,如果我将其理解为一种内联类派生。

Brian Rasmussen 提到使用委托。看起来像这样:

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 */ };
于 2012-06-29T22:40:25.273 回答
0

代表可能是您所追求的。

于 2012-06-29T22:46:00.143 回答
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 中的方法一样。

希望这可以帮助。在此处阅读更多内容以深入了解代表

代表们

于 2012-06-29T23:52:19.477 回答