2011-03-24 119 views
0

我想用C#創建一個和它的類名相同的函數。我可以創建一個與班級同名的功能嗎?

示例代碼段:

public class MyCustomer 
{ 
    public MyCustomer() 
    { 
    } 

    public void MyCustomer() 
    { 
    } 
} 

如果我嘗試編譯它Visual Studio是拋出一個錯誤。

+3

歡迎來到StackOverflow!您可能希望查看[常見問題](http://stackoverflow.com/faq)和[關於提問的方便指南](http://stackoverflow.com/questions/how-to-ask)。我編輯了一些不合適的東西,並添加了一些[格式化](http://stackoverflow.com/editing-help)。 **你能告訴我們這個代碼產生什麼特定的錯誤嗎?** – Charles 2011-03-24 06:54:07

+1

你爲什麼需要**來?你不能稱之爲類似但不一樣的東西嗎?使用與類相同的名稱保留給構造函數。 – 2011-03-24 06:54:28

+0

您不能將聲明的類名稱用作其成員之一。 – KaeL 2011-03-24 06:54:47

回答

5

您不能創建與類名同名的函數。與類名同名的函數被保留給構造函數。

2

你不能有方法名void MyCustomer()是相同的類名 - 這是預留給構造public MyCustomer()

2

重命名功能。認真的一個函數名應該表明該方法的效果。

所以將其更改爲ShowCustomerDetails或CreateMyCustomer或...

1

你不能有一個函數名一樣的類名。這是爲構造函數保留的

1

與類名稱同名的函數稱爲構造函數。它在創建對象時執行。你可以有多個構造函數(構造函數重載),但在這種情況下,你將擁有具有不同參數集的構造函數。例如:

public MyCustomer() 
{} 

public MyCustomer(int x) 
{ 
    // use the x variable. 
} 

另一個重要的一點是構造函數沒有返回類型。

+0

年後,但是您甚至無法將'void'指定爲構造函數的返回類型。你必須使用'public MyCustomer(int x)'。 – Andrew 2015-01-28 19:05:28

+0

@Andrew是的,你是對的..這是一個複製粘貼問題,我看了。感謝糾正..我已經更新了答案 – 2015-01-29 02:49:14

2

正如其他人所說,你不能這樣做。只是爲了清楚起見,雖然,語言規範引用(使用C#4規格)是一款10.3(重點煤礦):

實例構造函數,析構函數和靜態構造函數必須具有相同的名稱作爲直接封閉類。 所有其他成員的名稱必須與直接包含的類的名稱不同。

所以,你可以創建與具有相同的名稱作爲封裝類的方法的嵌套類:

public class MyCustomer 
{ 
    public class Nested 
    { 
     public void MyCustomer() {} 
    } 
} 

...但我強烈建議您不要這樣做。

你能告訴我們爲什麼你想這樣做呢?

1

簡單地說,你不能創建它,你想要什麼。我認爲你需要閱讀有關構造函數。 類名只被認爲是該類的保留關鍵字,並且只允許用戶使用構造函數名。在那裏框架不允許你使用void /方法名稱的任何返回類型。

+1

是的,我同意@lalit。這是我認爲的完美解釋。 – Liladhar 2011-03-24 07:34:43

相關問題