C# этот оператор в объявлении поля класса

Это чисто академический вопрос - я нашел способ довольно легко.

При портировании класса VB.Net на C# я натолкнулся на объявление поля в классе, которое использовало ключевое слово this в качестве параметра в выражении new(). Компилятор сказал, что "Ключевое слово" это "недоступно в текущем контексте" (компилятор VB не видел проблем с таким положением дел). Я легко справился с этим, переместив инициализацию поля в конструктор класса.

редактировать: после прочтения комментариев, я добавил следующий блок кода


    public class cTransactions
    {
        private List Trans = new List();
        private List Archive = new List();
        private cDDs Debits = new cDDs(this); // complier error 
                                            //Keyword 'this' is not available in the current context
        private string path = Directory.GetCurrentDirectory() + "\";
        private bool dirty = false;
        private int LastID;
        // followed by Property declarations, ctor, methods etc.
        //...
    }
    

Однако я не могу найти никакой ссылки на ключевое слово "this", недоступное до выполнения конструктора класса (хотя, возможно, я пропустил это открытие на более чем 500 страницах спецификации языка). Это тот случай или я должен искать какую-то ошибку в одной из строк до объявления поля?

1 ответ

Глядя на раздел 7.6.7 спецификации языка C#:

7.6.7 Этот доступ

Этот доступ разрешен только в блоке конструктора экземпляра, метода экземпляра или средства доступа к экземпляру. ... (подробности опущены) ... Использование этого в первичном выражении в контексте, отличном от перечисленных выше, является ошибкой во время компиляции. В частности, невозможно сослаться на это в статическом методе, статическом методе доступа к свойству или в инициализаторе переменной объявления поля.

Поэтому использование его в инициализаторе переменной в приведенном выше примере является ошибкой во время компиляции. Чтобы исправить это, переместите инициализацию в конструктор.

Другие вопросы по тегам