Ich möchte Anzahl der abgeleiteten Klassen in einem Array als ihre Basisklasse halten. Dann Schleife über das Array und lassen Sie die abgeleiteten Klassen eine Funktion aufrufen, die den gleichen DB erhalten, aber jede abgeleitete Klasse sollte den DB als eine andere Schnittstelle erhalten.Override-Funktion mit einem abgeleiteten Argument
Gibt es eine andere Möglichkeit, einen solchen Fall zu implementieren?
Das, was ich zu tun versucht, aber die Überschreibung kann nicht finden, eine geeignete virtuelle Funktion: kompilieren
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);
}
}
}
Warum können Sie 'IBase' nicht als gewünschte Schnittstelle innerhalb von überschriebenen Körpern darstellen? – slawekwin
kann ich das tun .. aber in diesem Fall hat myClassx die Berechtigung für die gesamte DB und es liegt daran, eine eigene Erlaubnis/Zugänglichkeit zu senken. –
Ist das nicht der Fall, solange 'IClassx' von' IBase' erbt? Vielleicht erstellen Sie eine andere, gefälschte Schnittstelle, nur um eine Basis für das Argument zu haben. – slawekwin