在c#中创建实例时覆盖抽象方法

时间:2012-05-27 20:16:53

标签: c# java .net

在java中,我们可以在实例创建时覆盖或实现抽象方法,如下所示:

AbstractClass test =new AbstractClass() 
{
    public void AbstractMethod(string i) {

    }
    public void AbstractMethod2(string i) {

    }
};

这在C#中是否可行?如果是,那么等效代码是什么

由于

3 个答案:

答案 0 :(得分:8)

此Java功能称为"anonymous class",而不是“实例创建方法的覆盖”。 C#中没有相同的功能。

C#采用了不同的路线 - 它不是为创建子类提供便利语法,而是扩展了其委托功能,提供了anonymous delegateslambdas。 Lambdas让你插入一些代码。

答案 1 :(得分:2)

你可以通过巧妙使用lambdas来实现非常相似的东西:

public class BaseClass {

    public BaseClass(Action<string> abs1 = null, Action<string> abs2 = null){
       AbstractMethod1 = abs1 ?? s=>{};
       AbstractMethod2 = abs2 ?? s=>{};
    }

    public Action<string> AbstractMethod1 {get; private set;}
    public Action<string> AbstractMethod2 {get; private set;}
}

所以你可以像这样使用这个定义:

new BaseClass( s=> Console.WriteLine(s), s=> Console.WriteLine(s));

您还可以将所有方法定义为接口的一部分,然后构造一个具有接口的具体实现的类(代理对具体实现的调用) - 我将其称为“策略”模式。但这只是这个主题的变体。

答案 2 :(得分:0)

不知道Java,但这会像C#中的Anonymous Types一样“闻起来”。

例如,您可以编写如下内容:

 var myNewType = new { 
                       Name = "Charles", 
                       Surname="Dickens", 
                       Age = 55 
                      };