Использовать переменную содержащего класса внутри вложенного класса - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь создать объект класса, который я могу использовать следующим образом:

var newObject = new MyClass(variable);

newObject.SubClass.DoSomethingWithVariable();

newObject.SubClassTwo.DoSomethingElseWithVariable();

Есть ли способ передать некоторую переменную в конструктор «родительского» класса и использовать ее в моих подклассах? Например, строка подключения.

Какая структура классов может достичь этого?

Например, я пробовал это:

public 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
        }
    }

end class

Но вложенные классы могут 'Нет ссылки на переменную в родительском классе.

1 Ответ

0 голосов
/ 04 августа 2020

Вложенный класс в некотором смысле является просто своего рода квалификатором - вы можете думать о нем как о более глубоком пространстве имен. Итак, ваша структура очень похожа на эту:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...