请考虑以下内容:
public interface IFoo
{
IFoo Bar(IFoo other);
}
这并不完全代表我想要的;它说如果一个类实现IFoo
,则它有一个Bar()
方法,该方法接受类型也实现IFoo
的 any 对象。我要表达的意思是Bar()
接受与调用它的对象相同类型的任何对象。 (我也想保证它也返回相同的类型。)
我真的想说的是类似的东西
this Bar(this other); // Obviously, this is a syntax error.
T Bar<T>(T other) where T : this; // Also not allowed.
T Bar<T>(T other) where T : typeof(this); // Nope.
有人知道该怎么做吗?我不知道。
(很明显,我可以在运行时检查参数的类型,如果不匹配则抛出异常。但是我真的希望在编译时保证它……)
答案 0 :(得分:0)
interface IFoo
{
T Bar<T>(T foo) where T : IFoo;
}
嗯,IDE中没有下划线。应该允许的。返回值和参数应为同一类型。用法示例:
interface IFoo
{
T Bar<T>(T foo) where T : IFoo;
}
class Foo : IFoo
{
public T Bar<T>(T foo) where T : IFoo
{
throw new NotImplementedException();
}
}
new Foo().Bar<Foo>(new Foo());
答案 1 :(得分:0)
到目前为止,我能想到的最接近的是:
public interface IFoo<T>
{
T Bar(T other);
}
public class Moo : IFoo<Moo> {...}
public void UseIFoo(T stuff) where T : IFoo<T> {...}
我曾期望where T : IFoo<T>
抱怨类型约束的影响……但事实并非如此。 似乎可以很好地进行编译...我想这已经接近了。