2017-11-09 6 views
1

コンソールに次のコードを出力すると、「Age is wrong」行に続いて「0」(犬のAgeを-10に入力すると)が表示されます。私は「年齢が間違っています」という行を表示したいだけです。get setのプロパティからアクセス情報を表示

Program Class

class Program 
{ 
    static void Main() 
    { 
     Animal dog = new Animal(); 
     dog.Age = -10; 
     Console.WriteLine(dog.Age); 
    } 
} 

Animal Class

class Animal 
{ 
    private int age; 
    private string color; 
    public int Age 
    { 
     get 
     { 
      return age; 
     } 
     set 
     { 
      if (value < 0) 
      { 
       Console.WriteLine("Age is wrong"); 
      } 
      else 
      { 
       age = value; 
      } 
     } 
    } 
} 
+0

ので、これは私は全体私のアイデアを取得するための最速の方法だろう、私はプログラミングに非常に新しいです画像 –

+0

で、問題のコードはない入れてみてください。ありがとうございましたらお助けください! – Zhipeng

+1

コードをコピー&ペーストするだけで、私と他の人があなたのコードをテストし、どこに問題があるかを見て、それを解決するのに役立ちます。 –

答えて

1

それがゼロでないときだけ年齢を記録し、これはあなたが何をすべきかで、あなたが望むものである:

if(dog.Age != 0) 
{ 
    Console.WriteLine(dog.Age); 
} 
+0

は、いくつかの犬は、実際にその後-1に年齢を設定し、有効な数値で、この番号をチェックし、まだ –

+0

を1歳に達していません。私は 'uint'を使うか、例外をスローすることを示唆していますが、それは学習曲線を急にするかもしれません。 –

1

あなたProgram授業では年齢がどのようになったのかを知りませんそれは現在の年齢の値(0)を出力するだけです。

あなたが年齢を設定するかどうかを示す、ブール値を返すメソッドが成功したかもしれない:

public int Age { get { return age; } } // no setter 

public bool SetAge(int newAge) 
{ 
    if (newAge < 0) 
    { 
     Console.WriteLine("Wrong age: " + newAge); 
     return false; 
    } 

    age = newAge; 
    return true; 
} 
.... 
if (dog.SetAge(-10)) 
{ 
    Console.WriteLine("Age successfully set to " + dog.Age); 
} 

それとも、例外処理に頼ることができます:あなたはすでにに書いているので

public int Age 
{ 
    get { return age; } 
    set 
    { 
     if (value < 0) throw new Exception("Invalid age: " + value); 
     age = value; 
    } 
} 
... 
try 
{ 
    dog.Age = -10; 
    Console.WriteLine(dog.Age); 
} 
catch (Exception ex) 
{ 
    Console.WriteLine("Error setting age: " + ex.Message); 
} 
+0

なぜ現在の年齢値は0として出力されますか?私は犬を入力したにもかかわらず.10歳? – Zhipeng

+0

'int'のデフォルト値は0であり、' age'フィールドは 'if(value <0)'ステートメントのために変更されません。デモンストレーションを行うには、年齢を10に、_then_を-10に設定してみると、それはまだ10になることがわかります。 –

0

をプロパティの設定者のコンソールを使用すると、すべての書き込みを設定ブロックに移動することができます。このような例:

class Program 
{ 
    static void Main() 
    { 
     Animal dog = new Animal(); 
     dog.Age = -10; 
    } 
} 

class Animal 
{ 
    private int age; 
    private string color; 
    public int Age 
    { 
     get 
     { 
      return age; 
     } 
     set 
     { 
      if (value < 0) 
      { 
       Console.WriteLine("Age is wrong"); 
      } 
      else 
      { 
       age = value; 
       Console.WriteLine(age); 
      } 
     } 
    } 
} 
関連する問題