Hi zusammen,
ich habe ein kleines Problem und versteh das Verhalten des .NET Compilers nicht ganz. Folgendes Szenario:
C#-Code: |
public interface InterfaceB
{
int Add(double a, double b);
}
|
C#-Code: |
public interface InterfaceA
{
int Add(int a, int b);
int Add(InterfaceB b1, InterfaceB b2);
}
|
C#-Code: |
static void Main(string[] args)
{
object a = new object();
InterfaceA b = (InterfaceA)a;
b.Add((int)1, (int)2);
}
|
Der Code in Main macht zwar so keinen Sinn ich wollte nur das Problem darstellen. In AssemblyC habe ich natürlich nur eine Referenz auf die AssemblyA weil ich ja das Interface dort adressiere. Das Problem nur ist das eine Überladung der Methode existiert in der ein Interface aus AssemblyB verwendet wird. Das führt dazu das ich einen Compilerfehler bekomme.
| Fehlermeldung: |
| The Type InterfaceB is defined in an assembly that is not referenced. You must add a reference to assembly AssemblyB. |
Ich muss eine Referenz auf AssemblyB hinzufügen damit der Code compiliert obwohl ich keinen Typen dieses Assemblies direkt referenziere! Wieso erkennt der Compiler nicht die genaue Überladung bzw. wieso braucht er eine Referenz auf eine Überladung die ich im Code doch gar nicht referenziere?
Gibt es eventuell eine Lösung den Compiler zu übereden
ohne eine Referenz auf AssemblyB hinzuzufügen und auch
ohne die Signaturen zu ändern?