はどうすればに次のコードが書かれているのでしょうか? 私は基底クラスを持ち、派生クラスの1つを基底クラスのメソッドの1つをオーバーライドしたいと思っていました。しかし、私はオーバーライドされるメソッドに対して別の署名が必要です(もっと複雑にするために、そのメソッドはループに埋められています)。追加のパラメータでメソッドをオーバーライドする抽象クラスを作成する方法
異なる署名を持つメソッドをオーバーライドするのと同等の処理を行うには、次のコードをどのように正しく構成する必要がありますか?
abstract class ClassBase
{
public void LoopThroughStuff(int i)
{
for (i = 0; i < 10; i++)
{
//DO A BUNCH OF STUFF
var k = (something determined in loop) //THIS IS USED IN Class2's DoSomething(i,k)
DoSomething(i); //THIS NEEDS TO BE OVERRIDDEN IN Class2 WITH ADDITIONAL PARAMETER, WHICH I KNOW CAN'T BE DONE
//DO A BUNCH OF STUFF
}
}
public virtual void DoSomething1(int x)
{
//DO STUFF
}
}
public class Class1 : ClassBase
{
}
public class Class2 : ClassBase
{
public override void DoSomething1(int j, int k) //I KNOW THIS CAN NOT BE DONE
{
//DO STUFF
}
}
あなたは '[]'のparamsオブジェクトを使用できますか? – Thomas
* overload *、オーバーライドしないでください。既存のメソッドにデフォルトのパラメータを追加する。ああ、またはトーマスが言ったこと。 – radarbob
このクラスのパブリックインターフェイスに 'DoSomething(int)'を含めている場合は、このクラスのすべての子孫がこの操作をサポートすることを約束しています。これが意図されていない場合は、代わりにこのメソッドを 'private'にすることを検討してください。これにより、この問題は完全に回避されます。 –