C # CodeProvider: наследование классов? - PullRequest
0 голосов
/ 21 мая 2011

Итак, я создал небольшой движок сценариев для создаваемой игры, используя CodeProvider. У меня есть несколько пользовательских классов, которые я определил в своем проекте, к которым скрипты должны иметь доступ, но даже после добавления наследования классов Assembly Reference («NAMEOFEXE.exe»), похоже, не работает должным образом.

Я могу наследовать класс, но я не могу изменить поля или что-либо еще. EG.

Код внутри проекта:

public class inheritable {
   internal string _name = "NoName";
}

Код внутри скрипта:

public class MyClass : inheritable {
   public MyClass() {
      _name = "Custom class in script";
   }
}

При составлении сценария я получаю:

error CS1061: 'inheritable' does not contain a definition for '_name' and no extension method '_name' accepting a first argument of type 'inheritable' could be found (are you missing a using directive or an assembly reference?)

Как я могу исправить эту проблему?

Ответы [ 4 ]

2 голосов
/ 22 мая 2011

Существует ли причина, по которой вы используете internal против protected или protected internal?

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

public string _name { get; protected set; }

Вы также можете определить конструктор в inheritable, который принимает имя.

2 голосов
/ 22 мая 2011
public class inheritable {
   protected internal string _name = "NoName";
}
0 голосов
/ 22 мая 2011

Определенно, похоже, что вы должны делать _name защищенным, поскольку вы хотите, чтобы производные классы имели к нему доступ. Я бы порекомендовал изменить его с поля на свойство.

0 голосов
/ 22 мая 2011

Определите метод получения и установки для _name: -

public string _name{
    get; set;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...