2011-03-24 123 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

相关问题