如何在C#中的对象实例中覆盖一个方法

时间:2012-06-29 22:36:26

标签: c# override abstract-class

我是一名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中用了一段时间做的一些文字游戏的东西。我已经研究过抽象的,虚拟的和匿名的类,但是没有一个完成这个。抽象和虚拟想要我创建一个全新的子类,但这将耗费大量时间并且不可行。匿名类没有(据我所知)使我能够覆盖方法,只是字段,并且不能为我提供任何稳定的依赖。

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

3 个答案:

答案 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中的方法。

希望这会有所帮助。在此深入了解代表们的详细信息

Delegates