在初始化时实现实例的抽象方法
本文关键字:抽象方法 实例 实现 初始化 | 更新日期: 2023-09-27 18:36:47
有一种方法可以在 C# 中像在 Java 中一样在初始化时实现实例的抽象方法?
public static abstract class A
{
public abstract String GetMsg();
public void Print()
{
System.out.println(GetMsg());
}
}
public static void main(String[] args)
{
A a = new A()
{
@Override
public String GetMsg()
{
return "Hello";
}
};
a.Print();
}
不,你不能 - 但你可以通过使用Func<string>
来实现相同的目的:
using System;
namespace Demo
{
public sealed class A
{
public Func<string> GetMsg { get; }
public A(Func<string> getMsg)
{
GetMsg = getMsg;
}
public void Print()
{
Console.WriteLine(GetMsg());
}
}
public static class Program
{
public static void Main()
{
var a = new A(() => "Hello");
a.Print();
}
}
}
或者,如果您希望能够在初始化后更改 GetMsg
属性:
using System;
namespace Demo
{
public sealed class A
{
public Func<string> GetMsg { get; set; } = () => "Default";
public void Print()
{
Console.WriteLine(GetMsg());
}
}
public static class Program
{
public static void Main()
{
var a = new A(){ GetMsg = () => "Hello" };
a.Print();
}
}
}
(这使用 c#6 语法 - 对于早期版本,您必须稍微修改它。