私は一般的な方法を持っています:
public bool DoSomething<T>(T item) where T: IBase
{
return DoSomethingSpecific(item);
}
public bool DoSomethingSpecific(IBase item)
{
return true;
}
public bool DoSomethingSpecific(IAdvanced item)
{
return false;
}
IAdvanced インターフェイスは、IBase インターフェイスから派生/継承することに注意してください。
IAdvanced 型の項目で DoSomething を呼び出すと、常に false が返されることがわかりました。私はこれを理解していません。IAdvanced は IBase 型であるため (このインターフェイスの子であるため)、DoSomethingSpecific メソッドの 2 つのオーバーロードされた型の間で混乱が生じる可能性があることはわかっています。ただし、C# の知識が限られているため、ここでは IAdvanced メソッドを選択する必要があります。これは、私がこの結論を下した方法の例です。
public class Advanced: IAdvanced
{
public void CallMethod()
{
DoSomething(this);
}
}
これにより、真の値が得られます。
しかし、もしそうなら:
public class Advanced: IAdvanced
{
public void CallMethod()
{
DoSomethingSpecific(this);
}
}
それは false を返します。これは私が期待するものです。
私はこれまでジェネリックを使用したことがないと言わざるを得ません。私は試みましたが、常にこのようなケースに行き詰まり、ジェネリックを使用するポイントを完全に理解できません(ツリーやリンクリストなどのデータ構造以外)。
今回はアドバイスを頂きたくてここに来ました。私がやろうとしていることに明確な問題はありますか? 私がここで忙しくしていることをやろうとするのは、おそらく意味がないのでしょうか?