在继承此接口的类型的接口中指定类型
Specifying a type in an interface of the type that inherits this interface
需要此代码的真正实现
interface IExample{
public this ReturnMe();
}
class Example : IExample {
public this ReturnMe(){...} //returns an instance of the Example class
}
您可以return接口本身:
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 切换到抽象基础 class 并使用 covariant return type:
后,另一个可用选项
abstract class ExampleBase
{
public abstract ExampleBase ReturnMe();
}
class Example : ExampleBase
{
public override Example ReturnMe() => new Example();
}
需要此代码的真正实现
interface IExample{
public this ReturnMe();
}
class Example : IExample {
public this ReturnMe(){...} //returns an instance of the Example class
}
您可以return接口本身:
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 切换到抽象基础 class 并使用 covariant return type:
后,另一个可用选项abstract class ExampleBase
{
public abstract ExampleBase ReturnMe();
}
class Example : ExampleBase
{
public override Example ReturnMe() => new Example();
}