2014-06-23 37 views
-1

這是一個類的賦值。傳遞構造函數參數的難度

這是我的代碼到目前爲止。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Proj03 
{ 
    class MyClass 
    { 
     public string MyClass(bool First, int Last) 
     { 

      if (First == true) 
      { 
       return "FirstName"; 
      } 

      else if (Last == 3) 
      { 
       return "LastName"; 
      } 

     } 


    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      bool var1 = true; 
      int var2 = 3; 
      Console.WriteLine(new MyClass(var1)); //Line 34 
      Console.WriteLine(new MyClass(var2)); //Line 35 
      Console.WriteLine("Press any key to terminate."); 
      Console.ReadKey(); 
     }//end main 
    }//end class Program 
}//end namespace 

我遇到的問題是雙重的:

首先,上線34和35口口聲聲說有在它有一個參數「MyClass的」無構造函數中的錯誤。所以很容易推斷出,哇,我需要一個構造函數,它可以在類中使用一個參數。我可以使構造函數很好,但難度在於傳遞「var1」和「var2」。我相信我需要在這裏通過引用。其次,我相信我需要考慮到「var1」和「var2」是不同的變量類型這一事實。這我真的不知道該怎麼辦。但這篇文章的主要問題是弄清楚第一個問題。

導師給我們的限制是我們不允許在「程序」類中更改任何內容。

所需的輸出如下:

顯示你的名字在這裏 這裏展示您的姓氏 按任意鍵終止。

+1

'公共MyClass的字符串(布爾首先,INT最後)':構造函數不返回值,所以這不是一個構造......甚至作爲一種方法,會發生什麼,如果首先=假,最後= 42? – John3136

+0

您可以創建兩個構造函數,一個採用布爾值,另一個採用int值。 – Blorgbeard

+0

而且,如果程序類已經由您的教師編寫,那麼我會爲您擔心 – Steve

回答

1

可以解決缺少的構造問題是這樣的:

public MyClass(bool First) 
    { 
     // your code here 
    } 

    public MyClass(int Last) 
    { 
     // your code here 
    } 

注意,沒有指定返回類型,因爲構造函數沒有回報。這將允許您的構造函數調用成功運行。

-1

看看可選參數。使用它們,您可以在構造函數的默認值中分配參數(不同於程序發送的參數)。然後,你的程序可以發送任何一個變量類型,並且不會拋出關於不正確的參數或變量類型的錯誤。

+1

我不相信用可選參數解決這個問題是可能的。在這種情況下,兩個調用中的第一個參數是不同的類型。可選參數只能出現在參數列表的末尾。 – recursive

+0

我似乎記得只能包含可選參數 - 仍然滿足「可選參數只能出現在參數列表的末尾」。我想知道它是否會找出哪個變量通過它所接收的變量的類型來修改......離C#:)一段時間:) –

0

問題在於您的類名和方法相同。你不可以做這個。不能將類中的任何屬性或方法與您的類調用相同。

您的構造函數問題是由於您致電new MyClass(var1)。你沒有在你的類中指定一個構造函數。這看起來像這樣:

public class MyClass 
{ 
    // This is a constructor that takes a parameter. 
    public MyClass(string myString) 
    { 
    } 

    // This is a constructor that takes 0 parameters. 
    // This exists if you do not specifically declare a constructor. 
    public MyClass() 
    { 
    } 
} 
0

你在找什麼叫做構造函數重載。你應該讓一個構造函數接受bool作爲參數,另一個接受int

這是一項家庭作業,所以我不打算提供一個樣本。但是,這應該足以讓你開始。

祝你好運。

1

我可能不應該這樣做,但是,呃...這是你想要達到的目標嗎?

class MyClass 
{ 
    private bool? _first; 
    private int? _last; 

    public MyClass(bool first) 
    { 
     _first = first; 
    } 

    public MyClass(int last) 
    { 
     _last = last; 
    } 

    public override string ToString() 
    { 
     if (_first != null) 
      return "FirstName"; 

     if (_last != null) 
      return "LastName"; 

     return String.Empty; 
    } 
} 
+0

所以當「var1」傳遞給MyClass時,最後一個下劃線是int ?意味着它被設置爲null? (因此只會導致返回「FirstName」) – Newprgm

+0

正確。一個'int?'將被初始化爲null。 'int?'是'Nullable '的語法糖,它是一個帶有'int Value'屬性和'bool HasValue'屬性的結構體。 '_first!= null'被編譯器翻譯爲'_first.HasValue'。但我只是意識到,我可能已經向你展示了你還沒學習的東西...... –

+0

關於我還沒有學到的東西的問題是,我目前正在使用的課程是我第一個C#課程,它是一個9個星期的課程,它是在線的(我的計劃不好)。這不是我爲我的學位而選擇的一門課程,但是我認爲這個課程將更多地處理XNA 4.0,而不是微軟的Visual C#(儘管我也喜歡C#(迄今爲止))。 – Newprgm