2016-03-10 6 views
0

Мне здесь что-то не хватает, я это знаю. Мои личные переменные «не назначены», но из моих (ограниченных) знаний они есть. Что мне не хватает? Я рассмотрел другие подобные вопросы, но я не совсем понимаю ответы (или даже вопросы!). Пожалуйста помоги.Переменная никогда не назначена на C#

public class Weapon 
{ 
    private string mName; 
    private double mRange; 
    private double mDamage; 

    public string Name 
    { 
     get { return mName; } 
     set { mName=value; } 
    } 

    public double Range 
    { 
     get { return mRange; } 
     set 
     { 
      if (value >= 0) 
       mRange=value; 
      else 
       throw new ArgumentException("Invalid Range"); 
     } 
    } 

    public double Damage 
    { 
     get { return mDamage; } 
     set 
     { 
      if (value >= 0) 
       mDamage=value; 
      else 
       throw new ArgumentException("Invalid Damage"); 
     } 
    } 

    public Weapon(string n, double d) 
    { 
     n = Name; 
     d = Damage; 
    } 
    public Weapon (string n, double r, double d) 
    { 
     n = Name; 
     r = Range; 
     d = Damage; 
    } 
+9

Вы ваши операции присваивания обратное. Левая часть - это переменная, которая * получает * значение. Для ex 'n = Name;' должно быть 'Name = n;' –

+0

В вашем конструкторе кажется, что вы должны менять переменные с двух сторон равных знаков ... – LibertyLocked

+0

Конечно, это так просто. Это всегда так. Спасибо :) – lepdeffard

ответ

0

Попробуйте это:

public class Weapon 
{ 
    private string _name; 
    private double _range; 
    private double _damage; 

    public string Name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      _name = value; 
     } 
    } 

    public double Range 
    { 
     get 
     { 
      return _range; 
     } 
     set 
     { 
      if (value >= 0) 
       _range = value; 
      else 
       throw new ArgumentException("Invalid Range"); 
     } 
    } 

    public double Damage 
    { 
     get 
     { 
      return _damage; 
     } 
     set 
     { 
      if (value >= 0) 
       _damage = value; 
      else 
       throw new ArgumentException("Invalid Damage"); 
     } 
    } 

    public Weapon(string n, double d) 
    { 
     Name = n; 
     Damage = d; 
    } 
    public Weapon(string n, double r, double d) 
    { 
     Name = n; 
     Range = r; 
     Damage = d; 
    } 
} 
+0

Почему мой ответ был опущен? – billybob

1

У вас есть конструктор задания в обратном направлении.

Это:

public Weapon(string n, double d) 
{ 
    n = Name; 
    d = Damage; 
} 
public Weapon (string n, double r, double d) 
{ 
    n = Name; 
    r = Range; 
    d = Damage; 
} 

Должно быть так:

public Weapon(string n, double d) 
{ 
    Name = n; 
    Damage = d; 
} 
public Weapon (string n, double r, double d) 
{ 
    Name = n; 
    Range = r; 
    Damage = d; 
} 
+0

Спасибо. Я знал, что это была простая ошибка. – lepdeffard

+1

Добро пожаловать :) –

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