2016-11-14 52 views
-3

我不明白構造函數是如何工作的。我試圖將這些數字放入課程的主程序中,但是無論何時我嘗試在主程序中使用構造函數,它都會提供「類Fooditem不包含構造函數,它需要2個參數」。這是非常令人困惑的,因爲我在那裏有一個叫public food(string name, int numberserved)的地方。我不明白爲什麼這條消息會彈出,我不知道如何解決。任何幫助,將不勝感激。c#構造函數的參數如何工作?

class Program 
    { 
     static void Main(string[] args) 
     { 
      FoodItem firstfood = new FoodItem("Spagetti", 3); 
      Console.WriteLine("The First Food is '{0}' And it serves {1}", firstfood.Name, firstfood.NumberServed); 
     } 
    } 

class FoodItem 
    { 
     string _name;  
     int _numberserved; 

     public void food(string name) 
     { 
      _name = name; 
      _numberserved = 0; 
     } 
     public void food(string name, int numberserved) 
     { 
      _name = name; 
      NumberServed = numberserved; 
     } 

     public string Name 
     { 
      get 
      { 
       return _name; 
      } 
     } 

     public int NumberServed 
     { 
      get 
      { 
       return _numberserved; 
      } 
      set 
      { 
       if (value > 4) 
       { 
        _numberserved = 4; 
       } 
       else 
       { 
        _numberserved = value; 
       } 
      } 
     } 
    }  
+0

什麼是你的類名? –

+3

構造函數的名字應該和類名一樣,你的類中沒有任何構造函數。 – Habib

+0

您的構造函數需要與該類具有相同的名稱。 –

回答

3

構造方法應具有相同的名稱爲您的類,並沒有返回類型:

class FoodItem 
{ 
    string _name;  
    int _numberserved; 

    public FoodItem(string name) 
    { 
     _name = name; 
     _numberserved = 0; 
    } 
    public FoodItem(string name, int numberserved) 
    { 
     _name = name; 
     NumberServed = numberserved; 
    } 
} 
0

你錯誤命名你的構造。將其更改爲FoodItem這樣的:

class FoodItem 
{ 
    string _name;  
    int _numberserved; 

    public FoodItem(string name) 
    { 
     _name = name; 
     _numberserved = 0; 
    } 
    public FoodItem(string name, int numberserved) 
    { 
     _name = name; 
     NumberServed = numberserved; 
    } 

    public string Name 
    { 
     get 
     { 
      return _name; 
     } 
    } 

    public int NumberServed 
    { 
     get 
     { 
      return _numberserved; 
     } 
     set 
     { 
      if (value > 4) 
      { 
       _numberserved = 4; 
      } 
      else 
      { 
       _numberserved = value; 
      } 
     } 
    } 
}  
1

如果類被稱爲FoodItem則構造也應該叫FoodItem並沒有返回值:

public class FoodItem 
{ 
    public FoodItem() 
    { 
     // Do stuff 
    } 

    public FoodItem(string name, int numberserved) 
    { 
     // Do stuff 
    } 
} 

你可以鏈構造一起使用: this構造。它可以工作兩種方式:

public FoodItem() 
    { 
     // Do basic stuff 
    } 

    public FoodItem(string name, int numberserved) : this() 
    { 
     // Do other stuff 
    } 

public FoodItem() : this ("defaultName", 0) 
    { 
    } 

你做什麼完全在你的應用程序依賴。

0

我已經改變了你的代碼,它現在可以工作。

class Program 
    { 
     static void Main(string[] args) 
     { 
      FoodItem firstfood = new FoodItem("Spagetti", 3); 
      Console.WriteLine("The First Food is '{0}' And it serves {1}", firstfood.Name, firstfood.NumberServed); 
     } 
    } 

class FoodItem 
    { 
     string _name;  
     int _numberserved; 

     public void food(string name) 
     public FoodItem() 
     { 
      _name = name; 
      _numberserved = 0; 
     } 
     public void food(string name, int numberserved) 
     public FoodItem(string name, int numberserved) 

     { 
      _name = name; 
      NumberServed = numberserved; 
     } 

     public string Name 
     { 
      get 
      { 
       return _name; 
      } 
     } 

     public int NumberServed 
     { 
      get 
      { 
       return _numberserved; 
      } 
      set 
      { 
       if (value > 4) 
       { 
        _numberserved = 4; 
       } 
       else 
       { 
        _numberserved = value; 
       } 
      } 
     } 
    }  

請讓我知道您的想法或反饋。

感謝 KARTHIK