2015-04-23 54 views
1

我寫了一個有多個重載的類,但是當我嘗試在類的外部使用它們時,只能使用默認構造函數。否則,我收到一個錯誤,指出不存在這樣的構造函數。儘管使用公共訪問修飾符,隱形構造函數?

 public Module()//default Module Class 
     { 
      Code = "Undefined"; 
      Title = "Undefined"; 
      Credits = 0; 
      Mark = 0; 
      ExamWeighting = 0; 
      ExamMark = 0; 
      CourseWorkNumber = 1; 
      Term = "AY"; 
      CourseWork1Name = "Undefined"; 
      CourseWork1Type = "Undefined"; 
      CourseWork1Weight = 1; 
      CourseWork1Mark = 0; 
     } 

     public Module(string code, string title, int credits, string moduleTerm, double exWeight, double exMark, string cW1Name, string cW1Type, double cW1Weight, double cW1Mark) 
     { 
      Code = code; 
      Title = title; 
      Credits= credits; 
      Mark = 0; 
      ExamWeighting = exWeight; 
      ExamMark = exMark; 
      CourseWorkWeight = 1.0 - exWeight; 
      CourseWorkNumber = 1; 
      Term = moduleTerm; 
      CourseWork1Name = cW1Name; 
      CourseWork1Type = cW1Type; 
      CourseWork1Weight = cW1Weight; 
      CourseWork1Mark = cW1Mark; 

     } 

我確保我有正確的數量和類型的參數,當然,除非我錯過了一些東西。

    string code = tempArray[0]; 
        string title = tempArray[1]; 
        int credits = Convert.ToInt16(tempArray[2]); 
        string moduleTerm = tempArray[3]; 
        double exWeight = Convert.ToDouble(tempArray[4]); 
        double exMark = Convert.ToDouble(tempArray[5]); 
        string cW1Name = tempArray[10]; 
        string cW1Type = tempArray[11]; 
        double cW1Weight = Convert.ToDouble(tempArray[12]); 
        double cW1Mark = Convert.ToDouble(tempArray[13]); 


        // (string code, string title, int credits, string moduleTerm, double exWeight, double exMark, string cW1Name, string cW1Type, double cW1Weight, double cW1Mark) 
        tempModule = new Module(code, title, credits, moduleTerm, exWeight, exMark, cW1Name, cW1Type, cW1Weight, cW1Mark); 
+0

呼叫代碼在哪裏? – chomba

+0

您的參數數量不正確或參數類型不正確。 – spender

+0

如何在解決方案上進行「清理」(在Visual Studio中右鍵單擊解決方案),然後執行「重建所有」?也許不知何故,它只是沒有采取新的ctor。 –

回答

1

有一英里長的參數列表是反模式。你剛剛發現爲什麼這是搞亂了呼叫的情況下,因爲您已經:

  • 得到了錯誤的參數數量

  • 了不正確的類型在您使用的參數中

在呼叫地點。

如果您不可避免地需要大量參數,那麼您可以考慮使用封裝所有這些參數的選項類。這也允許明智的默認值。所以

public class ModuleOptions 
{ 
    public ModuleOptions() 
    { 
     //supply sensible defaults here 
     Code = "Not set"; 
     Title = "Not set"; 
     //etc 
    } 
    public string Code{get;set;} 
    public string Title{get;set;} 
    //etc... 
} 

然後

public class Module 
{ 
    public Module(ModuleOptions options) 
    { 
     this.Code = options.Code; 
     //etc... 
    } 
} 

所以,現在您的通話網站看起來像

var opts = new ModuleOptions 
    { 
     Code = "1234", 
     //etc 
    }; 
var module = new Module(opts); 

現在是一個更容易看到發生了什麼,你就不太可能搞砸了你呼叫。