Ich bin kürzlich auf eine seltsame Frage gestoßen, die ich nicht erklären konnte und ich wäre froh, wenn jemand klären könnte, warum das passiert.Objektinstanzierung schlägt fehl, wenn überladener Konstruktor verwendet wird
Das Problem, das ich erlebt habe sich wie folgt:
ich eine Schnittstelle, die implementiert ist, etwa so:
namespace InterfaceTwo
{
public interface IA { }
}
namespace InterfaceTwo
{
public class A : IA { }
}
und eine andere Schnittstelle, die in einem anderen Projekt umgesetzt wird, etwa so:
namespace InterfaceOne
{
public interface IB { }
}
namespace InterfaceOne
{
public class B : IB { }
}
ich habe ein Objekt, das diese Schnittstellen in seiner Konstrukteuren verwendet, etwa so:
using InterfaceOne;
using InterfaceTwo;
namespace MainObject
{
public class TheMainObject
{
public TheMainObject(IA iaObj) { }
public TheMainObject(IB iaObj) { }
}
}
Und schließlich habe ich eine Klasse, die das oben genannte Ziel aggregiert, etwa so:
using InterfaceTwo;
using MainObject;
namespace ReferenceTest
{
public class ReferenceTest
{
public void DoSomething()
{
var a = new A();
var theMainObject = new TheMainObject(a);
}
}
}
Merkwürdig ist, wird dieser Code nicht mit dem folgenden Fehler kompiliert:
The type 'InterfaceOne.IB' is defined in an assembly that is not referenced.
You must add a reference to assembly 'InterfaceOne, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
c:\users\harry.baden\documents\visual studio 2013\Projects\ReferenceTest\ReferenceTest\ReferenceTest.cs 11 13 ReferenceTest
ich auch festgestellt, dass, wenn ich eine der Überladungen zu ändern, um einen zusätzlichen Parameter zu enthalten - es kompiliert ... Was hat mich denken, dass das Problem mit einer Art von Reflexion Problem, die der Compiler ausgeführt wird verbunden sein könnte.
Danke,
Barak.
Klicken Sie mit der rechten Maustaste auf Projekt und stellen Sie sicher, dass die Assembly korrekt referenziert wird, indem Sie auf refu- ren-> rebuild verweisen und sehen, was passiert – maximdumont
Sie müssen eine Referenz in Ihrem Visual Studio Solution Explorer (unter Ihrem Testprojekt) zur Assemby-Datei hinzufügen von interfaceOne. Schauen Sie hier: https://msdn.microsoft.com/en-us/library/7314433t%28v=vs.90%29.aspx – ZivS
Dies ist kein Problem der Referenzierung, da ich nicht möchte, dass ReferenceTest darüber informiert die Schnittstelle IB oder die Klasse B. Ich erwähnte auch, dass - "Ich fand auch, dass, wenn ich eine der Überladungen zu ändern, um einen zusätzlichen Parameter zu enthalten - es kompiliert ...". Ich gehe davon aus, dass das Problem mit der Tatsache zusammenhängt, dass eine der Überladungen mit der gleichen Menge an Parametern IB in sich hat und daher während des Kompilierens IB ebenfalls wissen muss. – BarakH