Может кто-нибудь объяснить, что здесь происходит.
Ну, сообщение об ошибке компилятора говорит об этом, действительно, после того, как вы прошли терминологию. Эта линия является недействительной:
string s3 = s1 + s2;
Вы объявляя переменный экземпляр и экземпляр инициализаторы переменной (s1 + s2
здесь) не может ссылаться на другие поля в экземпляре, который создается - или действительно сам экземпляр. Имейте в виду, что приведенное выше описание эквивалентно:
string s3 = this.s1 + this.s2;
Из раздела 10.5.5.2 в # 4 спецификации C:
переменной инициализатор для поля экземпляра не может ссылаться на экземпляр создается. Таким образом, это ошибка времени компиляции, чтобы ссылаться на в переменном инициализаторе, поскольку это ошибка времени компиляции для инициализатора переменной для ссылки на любой экземпляр элемента с помощью простого имени .
(Правда, что это одна из наиболее более странно бит формулировок в спецификации ...)
Вы должны поставить логику в тело конструктора вместо:
class Class1
{
string s1 = "hi";
string s2 = "hi";
string s3;
public Class1()
{
s3 = s1 + s2;
}
}
Это не факт, что здесь происходит «арифметика» (конкатенация строк), что является проблемой - это факт, что она неявно использует 'this'. –