為了保存代碼,我嘗試設定如下內容:
namespace Base {
class Application<CCOMPONENT1, CCOMPONENT2>
where CCOMPONENT1 : Component1
where CCOMPONENT2 : Component2 {
public CCOMPONENT1 component1;
public CCOMPONENT2 component2;
}
class Component<CAPPLICATION>
where CAPPLICATION : Application {
public CAPPLICATION application;
}
class Component1<CAPPLICATION> : Component<CAPPLICATION>;
class Component2<CAPPLICATION> : Component<CAPPLCIATION>;
...
}
namespace Derived {
class Application : Base.Application<Component1, Component2>;
class Component1 : Base.Component1<Application>;
class Component2 : Base.Component2<Application>;
...
}
顯然,它不起作用。當我為Application類指定泛型組件型別時,我必須將Application類指定為泛型型別,這反過來又需要我再次指定泛型組件型別,依此類推。非常像回圈參考。
我想要實作的是:Base.Application該類應Base僅包含對組件的參考,而Base.Component類應僅包含對應用程式的參考Base。但是,Derived.Application類應包含對Derived組件的參考,并且Derived.Component類應包含對Derived應用程式的參考。
盡管我已經玩了很長一段時間的泛型,但我仍然無法解決這個問題。這甚至可能嗎?對于我正在嘗試做的事情,是否有任何解決方法甚至更清潔的方法?
uj5u.com熱心網友回復:
根據我從評論中得到的指示,我想通了:
namespace Base {
public class Application<TAPPLICATION, TCOMPONENT1, TCOMPONENT2>
where TAPPLICATION : Application<TAPPLICATION, TCOMPONENT1, TCOMPONENT2>
where TCOMPONENT1 : Component<TAPPLICATION, TCOMPONENT1, TCOMPONENT2>
where TCOMPONENT2 : Component<TAPPLICATION, TCOMPONENT1, TCOMPONENT2> {
public TCOMPONENT1 Component1;
public TCOMPONENT2 Component2;
}
public class Component<TAPPLICATION, TCOMPONENT1, TCOMPONENT2>
where TAPPLICATION : Application<TAPPLICATION, TCOMPONENT1, TCOMPONENT2>
where TCOMPONENT1 : Component<TAPPLICATION, TCOMPONENT1, TCOMPONENT2>
where TCOMPONENT2 : Component<TAPPLICATION, TCOMPONENT1, TCOMPONENT2> {
public TAPPLICATION Application;
}
public class Component1<TAPPLICATION, TCOMPONENT1, TCOMPONENT2> : Component<TAPPLICATION, TCOMPONENT1, TCOMPONENT2>
where TAPPLICATION : Application<TAPPLICATION, TCOMPONENT1, TCOMPONENT2>
where TCOMPONENT1 : Component1<TAPPLICATION, TCOMPONENT1, TCOMPONENT2>
where TCOMPONENT2 : Component2<TAPPLICATION, TCOMPONENT1, TCOMPONENT2> {
}
public class Component2<TAPPLICATION, TCOMPONENT1, TCOMPONENT2> : Component<TAPPLICATION, TCOMPONENT1, TCOMPONENT2>
where TAPPLICATION : Application<TAPPLICATION, TCOMPONENT1, TCOMPONENT2>
where TCOMPONENT1 : Component1<TAPPLICATION, TCOMPONENT1, TCOMPONENT2>
where TCOMPONENT2 : Component2<TAPPLICATION, TCOMPONENT1, TCOMPONENT2> {
}
}
namespace Derived {
public class Application : Base.Application<Application, Component1, Component2> {
}
public class Component1 : Base.Component1<Application, Component1, Component2> {
}
public class Component2 : Base.Component2<Application, Component1, Component2> {
}
}
關鍵是為Base命名空間中的所有類提供所有泛型型別。看起來有點復雜,但我可以在Derived命名空間中輕松交換我認為合適的組件,最后我得到了我想要的。
謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/516374.html
標籤:C#仿制药
