2013-01-25 117 views
-1

由于我刚刚接触到构造函数主题,因此我对使用它的原因有一些疑惑。声明一个构造函数和不声明它有什么不同?C#构造函数声明

+1

http://en.wikipedia.org/wiki/Constructor_%28object-oriented_programming%29 –

+2

[构造函数(C#编程指南)](http://msdn.microsoft.com/zh-cn/library/vstudio/ ace5hbzh.aspx) – phoog

回答

3

构造函数用于初始化类对象。如果你不声明/定义它,那么将为你创建一个默认的构造函数。

2

如果你没有声明任何构造函数,编译器将生成没有参数的默认构造函数。

考虑这个类:

public Class X 
{ 
    public int A { get; set; } 
} 

在有没有构造函数声明,所以编译器会把默认的构造函数在类是这样的:

public Class X 
{ 
    public int A { get; set; } 

    public X() 
    { 
    } 

} 

如果你在类中声明构造函数中,将不会生成默认构造函数。

public Class X 
{ 
    public int A { get; set; } 

    public X (int a) 
    { 
      // do something 
    } 

} 

在此示例中,将不会生成默认的空构造函数。 如果您尝试创建这样一个实例:

X obj = new X(); 

它会生成编译错误。

更多细节:Default constructorsConstructor in C#

2

有声明一个公共的无参数的构造函数只是调用基类的公共的无参数的构造函数之间没有区别:

public class Test 
{ 
    public Test() : base() {} 
} 

等同于:

public class Test 
{ 
} 

编译器提供了一个默认construc为你的

(和base()部分是隐含的。如果你不明确链到另一个构造函数,编译器将其当作如果你试图链的参数的基类构造函数)

但这并不意味着构造函数是无用的......你通常会把代码放在那里。通常它复制参数:

public class Test 
{ 
    private readonly string name; 

    public Test(string name) 
    { 
     this.name = name; 
    } 
} 

...但构造函数大多可以包含与普通方法相同的代码。值得注意的是,当你的构造函数运行时,虽然对象可能不是完全初始化,因为派生类的构造函数体尚未执行。出于这个原因,建议不要在构造函数中调用虚拟方法。

有关实例构造函数的详细信息,请参见C#5规范的第10.11节;关于默认构造函数的详细信息,请参见第10.11.4节。


更具体而言,它将链,如果你写base()。如果没有无参数的构造函数,但有的构造函数,其参数都是可选的,将被调用。

1

构造函数被用于许多事情的类。

  1. 如果您想对类的实例进行初始化。

    public class MyClass 
    { 
        private string myWork = string.Empty; 
        public MyClass() 
        { 
         myWork = "Started"; 
        } 
        } 
    
  2. 如果你想limitize范围对象创建

    public class MyClass 
    { 
        private string myWork = string.Empty; 
        protected MyClass() 
        { 
         myWork = "Started"; 
        } 
    } 
    

还有许多其他的东西像基类的支持和其他人。请在MSDN上搜索。