2011-02-02 9 views
1

私はコード最終的な出力がゼロである理由:OOPSサンプル

using System; 

namespace xyzApp 
{ 
    class Program 
    { 
     public static void Main(string[] args) 
     {    
      Test1Class t = new Test1Class(); 
      t.Add(4); 
      t.Add(11.1); 
      t.showValue(); 
      Console.Write("Press any key to continue . . . "); 
      Console.ReadKey(true); 
     } 
    } 


    class TestClass{ 
     protected int sum =0; 

     public void Add(int x) 
     { 
      sum+=x; 
     } 

     public void showValue() 
     { 
      Console.WriteLine(" the sum is : {0}",sum); 
     } 
    } 

    class Test1Class :TestClass 
    { 
     double sum ; 

     public void Add(double x) 
     { 
      sum+=x; 
      Console.WriteLine(" the sum is : {0}",sum); 
     } 
    } 
} 

出力は

the sum is : 4 
the sum is : 15.1 
the sum is : 0 
Press any key to continue . . . 

最終的な出力が0である、そしてどのように私のように最終的な出力を得ることができ、なぜ誰かが、説明することができているし、次のしています派生クラスでprintValueメソッドを作成せずに15.1。

私はまた、それが言語ごとにどのように異なるかを知りたいと思います。 Test1Class影で おかげ

答えて

4

sum変数は、/ TestClasssum変数を隠します。したがって、AddメソッドでをTest1Classと参照すると、Test1Classの変数が参照されます。しかし、t.showValue()の最後のprint文では、まだ変更されていないTestClassの合計変数が呼び出されています。

おそらく、Test1Classのメンバー変数をすべて削除し、TestClassを使用することを意味します。これは、保護された状態に設定されているため、すべての派生クラスで使用できるためです。

あなたは、おそらくこのような何か意図:私はすべてがTest1Classからdouble sum;を削除して、二重にTestClassを中和変数を変更し、あなたが探している結果を得るべきだった

using System; 

    namespace xyzApp 
    { 
     class Program 
     { 
      public static void Main(string[] args) 
      {    
       Test1Class t = new Test1Class(); 
       t.Add(4); 
       t.Add(11.1); 
       t.showValue(); 
       Console.Write("Press any key to continue . . . "); 
       Console.ReadKey(true); 
      } 
     } 


     class TestClass{ 
      protected double sum =0; 

      public void Add(int x) 
      { 
       sum+=x; 
      } 

      public void showValue() 
      { 
       Console.WriteLine(" the sum is : {0}",sum); 
      } 
     } 

     class Test1Class :TestClass 
     {     
      public void Add(double x) 
      { 
       sum+=x; 
       Console.WriteLine(" the sum is : {0}",sum); 
      } 
     } 
    } 

を。 (しかし、保護された変数を使用することはあまり推奨されていません...)

+0

Testclassのsum変数もDoubleでなければなりません。そうでなければ、Test1classメソッドで "doubleをintに変換できません"というエラーが発生します。 – Nanda

+0

@nanda - true、私は異なるデータ型に気づいていませんでした。編集... – froadie

+0

派生クラスの基底クラスメンバのデータ型はどのような方法で購入できますか? – Sharique

関連する問題