2010-10-19 134 views
3
public class ElapsedTime 
{ 
    public int hours; 
    public int minutes; 
    public void ElapsedTime(int h, int m) 
    { 
     hours = h; 
     minutes = m; 
    } 
} 

從另一個事件我這樣做:C#:初學者類的構造問題

ElapsedTime BeginningTime = new ElapsedTime(); 

如何將我初始化hm

當我嘗試這樣做:BeginningTime.ElapsedTime(7, 7);

它給了我這個錯誤:

Error 1 'ElapsedTime': member names cannot be the same as their enclosing type

我要的是與接受初始化值的構造函數的類。我希望能夠稱呼它。

UPDATE:

現在我有:

public class ElapsedTime 
     { 
      private int hours; 
      private int minutes; 
      public ElapsedTime(int h, int m) 
      { 
       hours = h; 
       minutes = m; 
      } 
     } 

它給我上public ElapsedTime(int h, int m)

+0

通過.NET約定,局部變量應該用小寫啓動。您還應該將這兩個字段設置爲私有,並可能將它們作爲只讀屬性公開。 – 2010-10-19 19:57:13

+0

它現在正常工作! – 2010-10-19 20:01:13

回答

2

的構造一個類需要與類本身具有相同的名稱。現在,參數hm使它成爲一個參數的構造函數。爲了初始化這個類的一個實例,你需要爲這些類指定值。

ElapsedTime beginningTime = new ElapsedTime(7, 7); 

調用通過可變的構造是不可行的:

ElapsedTime beginningTime; 
beginningTime.ElapsedTime(7, 7); // This will cause an error, as your constructor isn't a method... 

在inroder是一個類初始化器,構造沒有返回類型(均未void)。

當然,如果你想,讓你在一定的格式值的屬性,則需要以暴露將爲您提供價值,你實例化的實例的屬性:

public class ElapsedTime { 
    public ElapsedTime(int h, int m) { 
     Hours = h; 
     Minutes = m; 
    } 

    public int Hours { get; private set; } 
    public int Minutes { get; private set; } 
    public string ElapsedTime { 
     get { 
      return string.Format("{0}:{1}", Hours, Minutes); 
     } 
    } 
} 

難道我正確理解你的問題?

6

相同erorr漏下void。通過在那裏,你聲明它是一個方法,而不是一個構造函數。

public class ElapsedTime 
{ 
    public int hours; 
    public int minutes; 
    public ElapsedTime(int h, int m) 
    { 
     hours = h; 
     minutes = m; 
    } 
} 

然後創建一個實例只是調用構造函數的問題。

ElapsedTime BeginningTime = new ElapsedTime(7, 7); 
+0

+1,甚至沒有注意到那裏的空白。 – Brandon 2010-10-19 19:54:47

+0

現在我對公共ElapsedTime(INT小時,INT米)得到這個錯誤 – 2010-10-19 19:55:05

+0

@ jenny-喜試( - :??你什麼錯誤 – 2010-10-19 19:58:33

1

你的意思是方法將是一個構造函數,所以它不應該包含返回類型(刪除void
現在你可以使用:

ElapsedTime BeginningTime = new ElapsedTime(7,7); 

不能調用構造函數課程創建完成後。
構造函數用於爲該類提供initial值。

1
ElapsedTime BeginningTime = new ElapsedTime(7,7); 

ofcourse刪除ElapsedTime無效()

2

你的構造函數是錯誤的。構造函數沒有返回類型。它需要像這樣

public class ElapsedTime { 
    private int hours; 
    private int minutes; 

    public ElapsedTime(int h, int m) { 
    hours = h; 
    minutes = m; 
    } 
} 

,然後你可以這樣

ElapsedTime BeginningTime = new ElapsedTime(7, 7); 
1

的成員被稱爲創建一個新的實例方法ElapsedTime()。具體來說,你還沒有創建一個構造函數。您已經使用構造函數的名稱創建了一個方法。

嘗試在方法定義前刪除void。這將使它成爲一個.ctor。

+0

現在我得到公衆ElapsedTime這個錯誤(INT小時,INT M) – 2010-10-19 19:56:04

1

設置事物的方式表示您希望在創建對象時將某些值hm傳遞給構造函數。你應該這樣做:

public class ElapsedTime 
{ 
    // you should probably makes these private 
    private int hours; 
    private int minutes; 
    // I took out the "void" as it is not correct 
    public ElapsedTime(int h, int m) 
    { 
     hours = h; 
     minutes = m; 
    } 
} 

然後你會做這個實例化ElapsedTime類的一個對象:

ElapsedTime BeginningTime = new ElapsedTime(7, 7); 

如果你想要做的事情,你擁有了它,現在你設置的方式(小時和分鐘後,你的價值觀通過Properties創建對象的新實例,你應該揭露那些Fields,就像這樣:

Public int Hours 
{ 
    set { 
     hours = value; 
    } 
    get { 
     return hours; 
    } 
} 

Public int Minutes 
{ 
    set { 
     minutes = value; 
    } 
    get { 
     return minutes; 
    } 
} 

然後你可以使用這些如下:

ElapsedTime BeginningTime = new ElapsedTime(7, 7); 
BeginningTime.Hours = 7; 
BeginningTime.Minutes = 7; 

以上相當於ElapsedTime BeginningTime = new ElapsedTime(7, 7);

所以你最好在你的類文件結束了這一點:

public class ElapsedTime 
{ 
    // you should probably makes these private 
    private int hours; 
    private int minutes; 
    // I took out the "void" as it is not correct 
    public ElapsedTime(int h, int m) 
    { 
     hours = h; 
     minutes = m; 
    } 
    Public int Hours 
    { 
     set { 
      hours = value; 
     } 
     get { 
      return hours; 
     } 
    } 

    Public int Minutes 
    { 
     set { 
      minutes = value; 
     } 
     get { 
      return minutes; 
     } 
    } 
}