同様の応答でスタックオーバーフローが検出されても、私はなぜ問題が発生しているのかを理解するのに苦労しています。一般的な拡張メソッドを使用しようとしたときに暗黙の参照変換が行われない
私のコードは以下の通りです:
class Program {
static void Main(string[] args) {
HomePage page = new HomePage();
page.Load(); //No Error
LoginPage page2 = new LoginPage();
page2.Load(); //No Error
ApprenticePage page3 = new ApprenticePage();
page3.Load(); //No implicit reference conversion
ApprenticeEPA page4 = new ApprenticeEPA();
page4.Load(); //No implicit reference conversion
Console.ReadLine();
}
}
public abstract class BasePage<T> where T : BasePage<T> {
public abstract bool EvaluateLoad();
}
public class HomePage : BasePage<HomePage>
{
public override bool EvaluateLoad()
{
Console.WriteLine("In HomePage");
return true;
}
}
public class LoginPage : BasePage<LoginPage>
{
public override bool EvaluateLoad()
{
Console.WriteLine("In LoginPage");
return true;
}
}
public class ApprenticePage : HomePage
{
public override bool EvaluateLoad()
{
Console.WriteLine("In ApprenticePage");
return false;
}
}
public class ApprenticeEPA : ApprenticePage
{
public override bool EvaluateLoad()
{
Console.WriteLine("In ApprenticeEPA");
return false;
}
}
public static class Helper {
public static T Load<T>(this T page) where T : BasePage<T> {
if (page.EvaluateLoad()) {
Console.WriteLine("It's true!");
return page;
} else {
Console.WriteLine("It's false!");
return default(T);
}
}
}
私は次のエラー取得しています:BasePage<T>
から継承HomePage
からApprenticePage
継承、として、私の心の中で
The type 'IndexerTest.ApprenticePage' cannot be used as type parameter 'T' in the generic type or method 'Helper.Load(T)'. There is no implicit reference conversion from 'IndexerTest.ApprenticePage' to 'IndexerTest.BasePage<IndexerTest.ApprenticePage>'.
を、ロードメソッドを使用すると大丈夫ですが、明らかにそうではありません。
Load
メソッドを修正して、クラス固有の実装がEvaluateLoad()
のコード内のすべてのクラスインスタンスで呼び出せるようにするにはどうすればよいですか?
制約によると、拡張メソッド 'T上:Tは' ApprenticePage'、 'ApprenticePage'は' BasePageクラス 'それゆえではないですBasePageクラス'、エラー –
Nkosi