Niedawno natknąłem się na dziwne zagadnienie, którego nie mogłem wyjaśnić i byłbym szczęśliwy, gdyby ktoś mógł wyjaśnić, dlaczego tak się dzieje.Utworzenie obiektu kończy się niepowodzeniem, gdy używa się przeciążonego konstruktora.
Kwestia Napotkałem się następująco:
Mam interfejs, który jest realizowany, tak:
namespace InterfaceTwo
{
public interface IA { }
}
namespace InterfaceTwo
{
public class A : IA { }
}
a inny interfejs, który jest realizowany w innym projekcie, tak jak poniżej:
namespace InterfaceOne
{
public interface IB { }
}
namespace InterfaceOne
{
public class B : IB { }
}
mam obiekt, który wykorzystuje te interfejsy w jego konstruktorów, jak tak:
using InterfaceOne;
using InterfaceTwo;
namespace MainObject
{
public class TheMainObject
{
public TheMainObject(IA iaObj) { }
public TheMainObject(IB iaObj) { }
}
}
I wreszcie, mam klasę, która agreguje powyższy cel, jak w przykładzie:
using InterfaceTwo;
using MainObject;
namespace ReferenceTest
{
public class ReferenceTest
{
public void DoSomething()
{
var a = new A();
var theMainObject = new TheMainObject(a);
}
}
}
dziwne, ten kod nie zostanie skompilowany z powodu następującego błędu:
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
ja również odkryłem, że jeśli zmienię jedno z przeciążeń, aby zawierał dodatkowy parametr - kompiluje ... Co sprawiło, że pomyślałem, że problem może być związany z jakimś problemem z odbiciem, który kompilator działa.
Dzięki,
Barak.
kliknij prawym przyciskiem myszy projekt i upewnij się, że zestaw jest poprawnie odwołany, dodając odwołanie do pliku-> przebuduj i zobacz, co się stanie – maximdumont
Musisz dodać odniesienie do swojego eksploratora rozwiązań wizualnych (w projekcie testowym) do utworzonego pliku assemby przez interfejsOne. Zobacz tutaj: https://msdn.microsoft.com/en-us/library/7314433t%28v=vs.90%29.aspx – ZivS
To nie jest kwestia referencji, ponieważ nie chcę, aby ReferenceTest wiedział o interfejs IB lub klasa B. Wspomniałem również, że "odkryłem, że jeśli zmienię jedno z przeciążeń, aby zawierał dodatkowy parametr - to kompiluje ...". Zakładam, że problem jest związany z tym, że jeden z przeciążeń o tej samej ilości parametrów ma IB w nim i dla niego, podczas kompilacji, musi również znać IB. – BarakH