Преобразование из java в c # аргумент super (ClassName.this)

У меня такой код:

public ClassC 
{
    public class ClassA extends ClassB<T> 
    {
        /**
        * @uml.property  name="index"
        */
        private int index;
        public ClassA()
        {
            super(ClassC.this);
            index = 0;
        }
    }

Я обнаружил, что ClassName.this требуется от внутренних классов, чтобы добраться до экземпляра внешнего класса this, но это мне не очень помогает. Я знаю, что моя проблема связана с нехваткой знаний, но более короткое объяснение сэкономит мне время. Как это должно выглядеть в c #? Я переименовал классы, чтобы сделать их более общим вопросом.


person David    schedule 04.05.2015    source источник
comment
Возможно, это связано с вашими вложенными классами ...   -  person BradleyDotNET    schedule 05.05.2015
comment
В C # вам не нужны какие-либо вложенные классы примерно в 99,5 процентах случаев.   -  person Robert Harvey    schedule 05.05.2015
comment
@RobertHarvey 0,05% звучит немного завышенно :)   -  person BradleyDotNET    schedule 05.05.2015
comment
@RobertHarvey верно для общедоступных классов, вложенные частные классы весьма полезны.   -  person Alex    schedule 05.05.2015
comment
@alex: Мой процент все еще применяется. Обратите внимание на использование любых слов в моем исходном комментарии. Если у вас есть верный пример, я все слышу, но обычно вложенные классы указывают на то, что ваш класс делает слишком много.   -  person Robert Harvey    schedule 05.05.2015
comment
Мне нужно переписать более сложный проект с java на C #, который, очевидно, был написан не мной.   -  person David    schedule 05.05.2015
comment
Просто используйте вместо этого композицию и напишите все необходимые классы в одном пространстве имен, а не во вложенных.   -  person Robert Harvey    schedule 05.05.2015
comment
@RobertHarvey, процент действительно может быть верным. Я говорю конкретно о частных внутренних классах, реализующих интерфейс или абстрактный базовый класс, хотя это может быть основано на мнении. Обратитесь, например, в Частные внутренние классы в C # - почему разве они не используются чаще?.   -  person Alex    schedule 05.05.2015
comment
@Alex: По сути, Джон Скит говорит, что MyCleverEnum будет использоваться только в этом одном классе, а не где-либо еще в программе, или в любой другой программе, если на то пошло. Это может случиться так, но, по моему опыту, хорошо написанные классы, подобные этому, следует сделать общедоступными автономными классами, чтобы остальная часть программы также могла их использовать.   -  person Robert Harvey    schedule 05.05.2015


Ответы (1)


Из документации:

Вложенный или внутренний тип может обращаться к содержащему или внешнему типу. Чтобы получить доступ к содержащему типу, передайте его как конструктор вложенному типу. Например:

public class Container
{
    public class Nested
    {
        private Container parent;

        public Nested()
        {
        }
        public Nested(Container parent)
        {
            this.parent = parent;
        }
    }
}
person MChaker    schedule 04.05.2015
comment
Итак, в конструкторе Nested я могу использовать base (parent)? - person David; 05.05.2015
comment
Нет, вы можете использовать parent.Member() - person Robert Harvey; 05.05.2015