覆盖在C#
问题描述:
在java中在实例创建抽象方法,我们可以覆盖或实现在实例创建抽象方法如下:覆盖在C#
AbstractClass test =new AbstractClass()
{
public void AbstractMethod(string i) {
}
public void AbstractMethod2(string i) {
}
};
这是可能在C#中?如果是,什么是等效代码
感谢
答
这个Java功能称为"anonymous class",而不是“关于创建实例方法的重写”。在C#中没有相同的功能。
C#采取了不同的路线 - 而不是提供创建子类的方便语法,它扩大在其委托功能,提供anonymous delegates和lambdas。 Lambdas让你插入一段代码。
答
不知道Java
,但这个“闻起来”像Anonymous Types在C#
。
例如,你可以写这样的:
var myNewType = new {
Name = "Charles",
Surname="Dickens",
Age = 55
};
答
可以实现通过巧妙地利用lambda表达式非常类似的东西:
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));
您也可以将所有方法定义为接口的一部分,然后用一个接口的具体实现构造一个类(代理调用具体实现) - 我会称之为“策略”模式。但这只是这个主题的变体。
不,与匿名类没有多少共同之处 - 即使它们听起来很相似。 – Voo