【发布时间】:2022-01-04 17:42:47
【问题描述】:
需要这个代码的真正实现
interface IExample{
public this ReturnMe();
}
class Example : IExample {
public this ReturnMe(){...} //returns an instance of the Example class
}
【问题讨论】:
需要这个代码的真正实现
interface IExample{
public this ReturnMe();
}
class Example : IExample {
public this ReturnMe(){...} //returns an instance of the Example class
}
【问题讨论】:
你可以返回接口本身:
interface IExample
{
public IExample ReturnMe();
}
class Example : IExample
{
public IExample ReturnMe() => new Example();
}
或者使用curiously recurring template pattern:
interface IExample<T> where T : IExample<T>
{
public T ReturnMe();
}
class Example : IExample<Example>
{
public Example ReturnMe() => new Example();
}
请注意,这不会阻止某人写class Example : IExample<SomeOtherClass>。
自 C# 9 以来可用的另一个选项是切换到抽象基类并使用 covariant return type:
abstract class ExampleBase
{
public abstract ExampleBase ReturnMe();
}
class Example : ExampleBase
{
public override ExampleBase ReturnMe() => new Example();
}
【讨论】: