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 Этот доступ
Этот доступ разрешен только в блоке конструктора экземпляра, метода экземпляра или средства доступа к экземпляру. ... (подробности опущены) ... Использование этого в первичном выражении в контексте, отличном от перечисленных выше, является ошибкой во время компиляции. В частности, невозможно сослаться на это в статическом методе, статическом методе доступа к свойству или в инициализаторе переменной объявления поля.
Поэтому использование его в инициализаторе переменной в приведенном выше примере является ошибкой во время компиляции. Чтобы исправить это, переместите инициализацию в конструктор.