調用子實例所以這個問題是一個石頭的一個明顯例子二鳥(設計和代碼的問題),我有其中有一個基本接口返回從接口或
interface IBase
{
IBase Method1();
}
abstract class Base : IBase
{
IBase Method1()
{
//do work
return this;
}
}
現在的基類子類
interface IChild1 : IBase
{
IChild1 ChildMethod();
}
class Child1 : Base, IChild1
{
public IChild1 ChildMethod()
{
//do work
// this would work fine Method1(); ChildMethod2();
//but I want to chain methods
Method1().ChildMethod2();
return this;
}
void ChildMethod2()
{
//do work
}
}
問題的關鍵是我希望基類返回子類實例。正如您從ChildMethod()方法中的代碼可以看出的那樣,基類方法Method1()返回IBase的實例,因此不能鏈接ChildMethod2()。是的,我可以生活而不必鏈接方法,但讓我們假設這是我唯一的選擇。
這是我在使用泛型
interface IBase<T> where T : IBase<T>
{
T Method1();
}
abstract class Base<T> : IBase<T> where T : Base<T>
{
public T Method1()
{
//do work
return (T)this;
}
}
interface IChild1 : IBase<IChild1>
{
IChild1 ChildMethod();
}
class Child1 : Base<Child1>, IChild1
{
public IChild1 ChildMethod()
{
//do work
Method1(); ChildMethod2();
return this;
}
void ChildMethod2()
{
//do work
}
}
爲了把事情清楚地去做我想實現的是,每次通話我做基類(接口在這種情況下)我想調用的類/接口返回。 注意:使用Autofac依賴注入
您的泛型示例不起作用嗎?我就是這麼做的。你應該能夠鏈接'Method1()。ChildMethod2();'。 –
@ChrisPickford不起作用 – Ifetayo
你真的需要將接口和父類一起使用嗎?如果你只有沒有接口的繼承鏈,那將很容易。在這種情況下泛型對接口來說也是無用的,因爲在使用它們時總是需要指定一些類:'IBase'。 –
Evk