由于我刚刚接触到构造函数主题,因此我对使用它的原因有一些疑惑。声明一个构造函数和不声明它有什么不同?C#构造函数声明
Q
C#构造函数声明
-1
A
回答
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();
它会生成编译错误。
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
构造函数被用于许多事情的类。
如果您想对类的实例进行初始化。
public class MyClass { private string myWork = string.Empty; public MyClass() { myWork = "Started"; } }
如果你想limitize范围对象创建
类public class MyClass { private string myWork = string.Empty; protected MyClass() { myWork = "Started"; } }
还有许多其他的东西像基类的支持和其他人。请在MSDN上搜索。
相关问题
- 1. C++。奇怪的构造函数声明?
- 2. 使用构造函数声明(构造函数?)
- 3. 类的构造函数声明
- 4. 声明在构造函数中
- 5. 如何声明构造函数?
- 6. 在构造函数中声明方法
- 7. C++/CLI,类声明之外的静态构造函数
- 8. 初始化私有对象在声明或构造函数,C#
- 9. 函数声明,而不是用C调用构造++
- 10. 只声明C++中的默认构造函数
- 11. 在Java中,方法/构造函数声明能否出现在另一个方法/构造函数声明中?
- 12. 构造函数nulltpr_t:函数定义不声明参数
- 13. C++前向声明和析构函数
- 14. Javascript构造函数中的函数声明的差异
- 15. C++函数声明
- 16. C#构造函数
- 17. 作为构造函数参数的构造函数调用将声明作为函数指针进行评估
- 18. 类构造函数声明...两种声明同一事物的方法?
- 19. 声明一个具有类构造函数作为函数参数的函数
- 20. 构造函数和析构函数 - C++
- 21. 不能构造LINQ声明
- 22. 如何声明图的数据构造函数
- 23. 在Object的构造函数中声明Object的数组?
- 24. 构造函数的参数后的这个声明
- 25. 如何将特征声明为隐式“构造函数参数”?
- 26. 将数组传递给构造函数而不声明它?
- 27. C++数据结构声明
- 28. 在构造函数的类头/ Assignement中声明一个字符串数组 - C++
- 29. (C++)函数不声明
- 30. 与函数声明C++
http://en.wikipedia.org/wiki/Constructor_%28object-oriented_programming%29 –
[构造函数(C#编程指南)](http://msdn.microsoft.com/zh-cn/library/vstudio/ ace5hbzh.aspx) – phoog