2016-09-15 5 views
-3

以下、私は「Staff」という名前のシンプルなクラスを作成しました。 mainメソッドで新しいstaffオブジェクトをインスタンス化しようとすると、すべてが完璧に機能します。なぜそれはメインの方法では動作しますが、私のファーゼのメソッド "Frog"では動作しませんか?メインメソッドではない別のクラスの中でオブジェクトをインスタンス化する

class staff 
{ 
    //Fields 
    private string nameOfStaff; 
    private const int hourlyRate = 30; 
    private int hWorked; 

    //Properties 
    public int HoursWorked 
    { 
     get 
     { 
      return hWorked; 
     } 
     set 
     { 
      if (value > 0) 
       hWorked = value; 
      else 
       hWorked = 0; 
     } 
    } 


    //Methods 
    public void PrintMessage() 
    { 
     Console.WriteLine("Calculating Pay..."); 
    } 

    public int CalculatePay() 
    { 
     PrintMessage(); 

     int staffPay; 
     staffPay = hWorked * hourlyRate; 

     if (hWorked > 0) 
      return staffPay; 
     else 
      return 0; 
    } 

    public int CalculatePay(int bonus, int allowances) 
    { 
     PrintMessage(); 
     if (hWorked > 0) 
      return hWorked * hourlyRate + bonus + allowances; 
     else 
      return 0; 
    } 

    public override string ToString() 
    { 
     return "Name of Staff = " + nameOfStaff + ", hourlyRate = " + hourlyRate + ", hWorked = " + hWorked; 
    } 

    //Constructors 
    public staff(string name) 
    { 
     nameOfStaff = name; 
     Console.WriteLine("\n" + nameOfStaff); 
     Console.WriteLine("-------------------------"); 
    } 

    public staff(string firstName, string lastName) 
    { 
     nameOfStaff = firstName + " " + lastName; 
     Console.WriteLine("\n" + nameOfStaff); 
     Console.WriteLine("-------------------------"); 
    } 

} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     // Instanciating an Object 
     int pay; 
     staff staff1 = new staff("Peter"); 
     staff1.HoursWorked = 160; 
     pay = staff1.CalculatePay(1000, 400); 
     Console.WriteLine("Pay = {0}", pay); 
} 

class frog 

{ 
    // Why can't I instantiate a staff member here? 
} 
+3

あなたはどういうことができないのですか?あなたは何をしようとしていますか?あなたはどんなエラーを出していますか? –

+2

どういう意味ですか? 'staff'型のフィールドを実装してインスタンス化することはできません。 – InBetween

+0

Hmmm - できます。あなたはあなたのクラスに静的かsomかをマークしていないと確信していますか?あなたはどんなエラーを出していますか? –

答えて

3

あなたは、おそらく、あなたはフィールドにアクセスすることができますfrogコンストラクタ、メソッド、プロパティにmainからコードを移動したい:

class frog 
{ 
    public staff Staff {get; set;} 

    public frog() { 
    Staff = new staff("Peter"); 

    // Now do everything you like with the Staff 
    Staff.HoursWorked = 160; 
    } 
} 
+0

ありがとうございました!あなたの答えと私が下で提供したものとの間には単純な違いがありますか? – Alan

+1

私はむしろ 'int pay = Staff1.CalculatePay(1000,400);'という計算を別々のメソッドに抽出したいと思います。 'string.format(Pay = {0} '、pay);' ToString() 'をオーバーライドします; –

+0

違いは、メソッドのスコープ内のフィールド、メソッド、プロパティに自由にアクセスできる点です;ケースはコンストラクタです。 –

0

ので、多分、私は求めていませんでした質問を正しく(私は答えを知らなかったので)私はそれを把握することができましたが、それを把握することができました...

私はpではありませんositive static void newStaff()は行いますが、コードをコンパイルすることができます。明らかにここで新しい学習しようとしている..

関連する問題