Вложенный класс в некотором смысле является просто своего рода квалификатором - вы можете думать о нем как о более глубоком пространстве имен. Итак, ваша структура очень похожа на эту:
namespace MyClass
{
class MyClass
{
private string connectionString;
public MyClass(string conn)
{
connectionString = conn;
}
}
public class SubClass
{
public void DoSomethingWithVariable()
{
//something with the connection string
}
}
public class SubClassTwo
{
public void DoSomethingElseWithVariable()
{
//something with the connection string
}
}
}
Как вы можете видеть, все эти классы не имеют ничего общего друг с другом, и поэтому они ничего не разделяют. Единственное исключение состоит в том, что вы, конечно, можете ссылаться на члены static
содержащего класса, но это, похоже, не применяется в вашем случае.
С точки зрения экземпляра SubClass
или SubClassTwo
нет экземпляра MyClass
- потому что это просто некоторое пространство имен. Вы также можете создать экземпляр SubClass
, вообще не имея экземпляра MyClass
:
var subClass = new MyClass.SubClass(); // no instance of MyClass is created here
С другой стороны, вы можете создавать экземпляры MyClass
без создания экземпляра SubClass
:
var newObject = new MyClass(variable); // no instance of SubClass is created here
Вы можете сделать свой член static
внутри содержащего класса. Затем содержащиеся классы могут получить к нему доступ, потому что для использования этого члена не требуется никакого конкретного экземпляра. Однако было бы лучше, ИМХО, предоставить экземпляр зависимости как аргумент-конструктор для подклассов:
public class SubClass
{
public SubClass(MyClass m) { ... }
public void DoSomethingElseWithVariable()
{
// do something with the provided MyClass
}
}
Таким образом, для использования кода довольно ясно, что SubClass
зависит от MyClass
.