有一种方法可以在Java中实现C#初始化实例的抽象方法吗?
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();
}
Run Code Online (Sandbox Code Playgroud)
不,你不能 - 但你可以通过使用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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您希望能够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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
(这使用了c#6语法 - 你必须为早期版本略微修改它.)
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |