配列の派生クラスの数を基本クラスとして保持したいと考えています。 次に、配列をループし、派生クラスに同じDBを受け取る関数を呼び出させますが、それぞれの派生クラスは異なるInterfaceとしてDBを受け取る必要があります。派生した引数を持つオーバーライド関数
このようなケースを実装する別の方法はありますか?このコードはコンパイルされません
public interface IBase
{
}
public interface IClass1 : IBase
{
bool[] IsEnable { get; }
}
public interface IClass2 : IBase
{
bool[] IsEnable { set; }
}
public class DB : IBase, IClass1, IClass2
{
public bool[] IsEnable { get; set; }
}
public abstract class Base
{
public virtual void fRun(IBase p_oOb)
{
}
}
class MyClass1 : Base
{
public override void fRun(IClass1 p_oOb)
{
Console.WriteLine("MyClass1 fRun.");
}
}
class MyClass2 : Base
{
public override void fRun(IClass2 p_oOb)
{
Console.WriteLine("MyClass2 fRun.");
}
}
class Program
{
static void Main(string[] args)
{
DB db = new DB();
Base[] classes = new Base[] {new MyClass1(), new MyClass2()};
foreach (var Class in classes)
{
Class.fRun(db);
}
}
}
なぜオーバーライドされたボディの中に希望のインターフェイスとして 'IBase'をキャストできませんか? – slawekwin
私はそれを行うことができます..しかし、そのような場合には、myClassxはDB全体に対する許可を持っています。 –
'IClassx'が' IBase'から継承している限り、そうではありませんか?おそらく引数の基底を持つために別の偽のインタフェースを作成するかもしれません。 – slawekwin