2014-09-03 79 views
0

所以,我有一些類的做法,並且我已經很容易被類困住了一個星期左右。我不知道如何從一個班級轉到另一個班級,但是我的任務要求我這樣做。C#'Basics.Product'不包含'ProductGroup'的定義

我已經用英文翻譯了我的代碼。

using System; 
    namespace Basics 
    { 
     // Sinun koodi tulee tähän 
     public class Product 
      { 
       string name; 
       decimal price; 

       public Product(string name, object ProductGroup, decimal price) 
       { 
        this.Price = price; 
        this.Name = name; 
       } 

       public Product(string name, object ProductGroup) 
       { 
        this.Name = name; 
       } 

       public decimal Price 
       { 
        get 
        { 
         return price; 
        } 
        set 
        { 
         price = value; 
        } 
       } 

       private string Name 
       { 
        get 
        { 
         return name; 
        } 
        set 
        { 
         name = value; 
        } 
       } 



       public string Summary 
       { 
        get 
        { 
         return this.Name + this.ProductGroup + this.Price; 
        } 
       } 
      } 

     public class ProductGroup 
     { 
       string name; 

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


       public ProductGroup(string name) 
       { 
        this.Name = name; 
       } 
     } 


     class Program 
     { 
      static void Main() 
      { 


       Product[] purchases = new Product[2]; 
       ProductGroup applianceGroup = new ProductGroup("Appliances"); 
       purchases[0] = new Product("Coffeemaker", applianceGroup, 49.90M); 
       purchases[1] = new Product("Microwave", applianceGroup); 
       purchases[1].Price = 99.90M; 
       decimal sum = 0; 
       foreach (Product t in purchases) 
       { 
        sum += t.Price; 
        Console.WriteLine(t.Summary); 
       } 
       Console.WriteLine("Totals {0:f2}", sum); 
       Console.ReadLine(); 
      }  
     } 
    } 

這使我的問題該生產線是return this.Name + this.ProductGroup + this.Price;

返回我的錯誤提前'Basics.Product' does not contain a definition for 'ProductGroup' and no extension method 'ProductGroup' accepting a first argument of type 'Basics.Product' could be found (are you missing a using directive or an assembly reference?

感謝。

+0

(建議)爲每個類設置一個獨立的* .cs文件並確保它們具有相同的命名空間。編輯@Chris建議^^ – 2014-09-03 09:50:46

+1

@Sebastian:雖然這可能是很好的建議,整潔的代碼,你應該澄清,這是你的建議,而不是解決問題(因爲這將無濟於事)。 – Chris 2014-09-03 09:51:50

回答

2

這裏的問題是,您沒有0123'的所有者ProductGroup,所以它不知道你指的是什麼。您需要創建一個類型爲ProductGroup的新屬性,該屬性也可以稱爲ProductGroup。

public ProductGroup ProductGroup {get; set;} 

這是從#3開始使用c# auto-implemented properties。儘管如此,您也可以使用後臺字段來完成此操作。

然後你會改變你的構造函數保存這個變量(您已經在傳遞):

public Product(string name, ProductGroup productGroup) 
{ 
    this.Name = name; 
    this.ProductGroup = productGroup; 
} 

請注意,我已經改變了參數的構造函數的類型以及添加的分配。很明顯,以同樣的方式更新你的其他構造函數,然後它應該像你希望的那樣工作。

+0

這樣做了,現在我得到了'不能將類型'object'隱式轉換爲'Basics.ProductGroup'。存在明確的轉換(您是否缺少一個轉換?)' – Tatu 2014-09-03 12:48:20

+0

您是否已將參數的類型更改爲構造函數?你不應該在你的代碼中任何地方都有'object'(你幾乎總是想要像我在更新的構造函數中那樣指定一個更具體的類型)。 – Chris 2014-09-03 13:09:03

0

除了克里斯的回答,我認爲這可能有助於賦予該屬性與其類型不同的名稱。開始時它可以防止可能的混淆。例如:

public Product(string name, ProductGroup group) 
{ 
    this.Name = name; 
    this.Group = group; 
} 

public ProductGroup Group {get; set;} 
+0

進一步詢問,如何將文字寫入字段組?使用'string group'''返回給我'不能隱式地將類型'字符串'轉換爲'Basics.ProductGroup'' – Tatu 2014-09-03 11:55:31

+0

group.Name =「text」; – 2014-09-03 14:13:04

相關問題