Допустим, у меня есть класс (ClassA
), содержащий один метод, который вызывает конструктор другого класса, например:
public class ClassA
{
public void CallClassBConstructor()
{
using(ClassB myB = new ClassB()) {...}
}
}
Класс ClassB
выглядит следующим образом:
public class ClassB : IDisposable
{
public ClassB(){}
public ClassB(string myString){}
public ClassB(ClassC myC){}
public void Dispose() {...}
}
... и ClassC
еще проще:
public class ClassC{}
Если я помещу эти классы в их собственную сборку и скомпилирую все решение, я не получу никаких ошибок.Но если я заменю оператор using на следующее:
using(ClassB myB = new ClassB("mystring")){...}
, я получаю ошибку компиляции, в которой мне предлагается добавить ссылку на [mynamespace].ClassC
в ClassA
.Поскольку я вообще не вызываю ClassB(ClassC myC)
, для меня это не имеет никакого смысла - почему я должен включать типы других конструкторов независимо от того, использую я их или нет?Что если ClassC
был включен в лицензированную или труднодоступную сборку?Это пример плохого дизайна, которого разработчики должны избегать, или я что-то здесь упускаю?