Lassen Sie uns sagen, dass ich eine Klasse (ClassA
) enthält, ein Verfahren, das den Konstruktor einer anderen Klasse aufruft, wie folgt aus:Warum muss ich in nicht verwendeten Konstruktoren auf Typen verweisen?
public class ClassA
{
public void CallClassBConstructor()
{
using(ClassB myB = new ClassB()) {...}
}
}
Die Klasse ClassB
wie folgt aussieht:
public class ClassB : IDisposable
{
public ClassB(){}
public ClassB(string myString){}
public ClassB(ClassC myC){}
public void Dispose() {...}
}
... und ClassC
ist noch einfacher:
public class ClassC{}
Wenn ich diese Klassen in ihren eigenen Arsch embly und kompilieren Sie die ganze Lösung Ich bekomme keine Fehler. Aber wenn ich die Anweisung using mit diesem ersetzen:
using(ClassB myB = new ClassB("mystring")){...}
ich einen Kompilierungsfehler fragen mich einen Verweis auf [mynamespace].ClassC
in ClassA
hinzuzufügen. Da ich überhaupt nicht ClassB(ClassC myC)
anrufe, macht das für mich keinen Sinn - warum muss ich die Typen anderer Konstruktoren einbeziehen, egal ob ich sie verwende oder nicht? Was wäre, wenn ClassC
in einer lizenzierten oder schwer zu erwerbenden Baugruppe enthalten wäre? Ist das ein Beispiel für schlechtes Design, das Entwickler vermeiden sollten, oder fehlt mir hier etwas?
Dies kann nicht an erster Stelle kompiliert werden, ClassB implementiert IDisposable nicht. Dann kann es nicht in einer using-Klausel verwendet werden. –
Dies ist nicht C/C++, wo ungültiger nicht verwendeter Code automatisch ignoriert wird, wenn die Abschnitte vom Linker bearbeitet werden. – leppie
Ich bearbeitet den Code, so dass es jetzt kompilieren sollte –