2013-09-30 2 views
0

Я новичок в программировании и изучаю C# для разработки приложений для Windows 8. Я использую книгу «Head First C# - 3rd Edition». Первый пример, похоже, терпит неудачу. Для тех, у кого есть книга, это указано на стр. 33. В приведенном ниже коде я удалил ненужные методы и оставил только соответствующий код.Запрошенное поле недоступно для справки

public sealed partial class MainPage : Save_the_Humans.Common.LayoutAwarePage 
{ 
    public MainPage() 
    { 
     Random random = new Random(); 
     this.InitializeComponent(); 
    } 

    private void startButton_Click(object sender, RoutedEventArgs e) 
    { 
     AddEnemy(); 
    } 

    private void AddEnemy() 
    { 
     ContentControl enemy = new ContentControl(); 
     enemy.Template = Resources["EnemyTemplate"] as ControlTemplate; 
     AnimateEnemy(enemy, 0, playArea.ActualWidth - 100, "(Canvas.Left)"); 
     AnimateEnemy(enemy, random.Next((int)playArea.ActualHeight - 100), 
      random.Next((int)playArea.ActualHeight - 100), "(Canvas.Top)"); 
     playArea.Children.Add(enemy); 
    } 

    private void AnimateEnemy(ContentControl enemy, double from, double to, string propertyToAnimate) 
    { 
     Storyboard storyBoard = new Storyboard() { AutoReverse = true, RepeatBehavior = RepeatBehavior.Forever }; 
     DoubleAnimation animation = new DoubleAnimation() 
     { 
      From = from, 
      To = to, 
      Duration = new Duration(TimeSpan.FromSeconds(random.Next(4, 6))) 
     }; 
     Storyboard.SetTarget(animation, enemy); 
     Storyboard.SetTargetProperty(animation, propertyToAnimate); 
     storyBoard.Children.Add(animation); 
     storyBoard.Begin(); 
    } 
} 

Проблема заключается в использовании созданного экземпляра поля «случайным». Ошибка времени компиляции говорит: «Имя« случайный »не существует в текущем контексте». Я недостаточно разбираюсь в том, что может вызвать проблему.

 AnimateEnemy(enemy, random.Next((int)playArea.ActualHeight - 100), 
      random.Next((int)playArea.ActualHeight - 100), "(Canvas.Top)"); 

ответ

2

Ваша случайная величина не поле. Измените свой конструктор на это:

private Random random; 
public MainPage() 
{ 
    this.random = new Random(); 
    this.InitializeComponent(); 
} 
+0

Большое спасибо за ваш ответ. Есть ли у вас какие-либо идеи, почему авторы специально отмечают, что это поле? Кроме того, я знаю, что я ошибаюсь в этом, но если бы это было «Random random = new Random();», не создало бы новую переменную «Random» с именем «random», не объявив ее вне конструктора ? – RAB

+0

Возможно, авторы только что сделали ошибку. Пример, который вы предоставили, действительно просто делает экземпляр Random доступным только внутри вашего конструктора. Опять же, наверное, ошибка с их стороны! Я был бы признателен за правильность, если ваша проблема решена! :) –

2

Это не поле; это локальная переменная в конструкторе.
Он не существует вне конструктора.

Необходимо изменить его на поле.

Смежные вопросы