在 c# 中创建实例时重写抽象方法
本文关键字:重写 抽象方法 实例 创建 | 更新日期: 2023-09-27 18:35:39
在Java中,我们可以在创建实例时覆盖或实现抽象方法,如下所示:
AbstractClass test =new AbstractClass()
{
public void AbstractMethod(string i) {
}
public void AbstractMethod2(string i) {
}
};
这在 C# 中可能吗? 如果是,等效代码是什么
谢谢
这个 Java 特性称为"匿名类",而不是"创建实例时的方法覆盖"。C# 中没有相同的功能。
C# 采用了不同的路线 - 它没有为创建子类提供方便的语法,而是扩展了其委托功能,提供了匿名委托和 lambda。Lambda 允许您插入代码段。
你可以通过巧妙地使用 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));
您还可以将所有方法定义为接口的一部分,然后构造一个具有接口具体实现的类(代理对具体实现的调用)——我称之为"策略"模式。但这只是这个主题的变体。
不知道
Java
,但这"闻起来"像C#
中的匿名类型。
例如,您可以编写如下内容:
var myNewType = new {
Name = "Charles",
Surname="Dickens",
Age = 55
};