我正在阅读使用两个构造函数的C#中的代码。一个是静态的,另一个是公共的。这两个构造函数有什么区别?而对于我们必须使用静态构造函数?公共构造函数和静态构造函数
回答
static
和public
是正交的概念(即它们彼此没有任何关系)。
public
只是表示该类的用户可以调用该构造函数(而不是像private
)。
static
意味着该方法(在本例中为构造函数)不属于类的实例,而属于“类本身”。特别是,当第一次使用类时,静态构造函数会自动调用一次。
此外,静态构造函数不能被制作为public
或private
,因为它不能被手动调用;它只能由.NET运行时自己调用 - 因此将其标记为public
不会有意义。
静态构造函数...它保证被称为“一次”通过应用程序/应用程序域的生命。它可以包含您只想执行一次的语句。
Public Constructor ...由于我们不能将访问修饰符添加到静态构造函数,所以公共构造函数意味着您正在讨论实例构造函数。如果一个实例构造函数是公共的,那么外部世界可以创建它的实例。 其他选项是内部的(可以从图书馆内部调用),私人的(仅限于课堂内部)。
在类实例化之前,静态构造函数只运行一次。如果你想要发生一次事情就会使用它。一个很好的例子是汽车类(类似于他们在MSDN article解释一下):
public class Bus
{
public static int busNo = 0;
static Bus()
{
Console.WriteLine("Woey, it's a new day! Drivers are starting to work.");
}
public Bus()
{
busNo++;
Console.WriteLine("Bus #{0} goes from the depot.", busNo);
}
}
class Program
{
static void Main(string[] args)
{
Bus busOne = new Bus();
Bus busTwo = new Bus();
}
// Output:
// Woey, it's a new day! Drivers are starting to work.
// Bus #1 goes from the depot.
// Bus #2 goes from the depot.
}
我喜欢它,因为清晰的第一行:简单和简单! – 2016-05-27 06:41:01
静态构造函数
构造函数声明使用static修饰符是一个静态构造函数。静态构造函数用于初始化静态数据或执行需要在类的生命周期中仅执行一次的特定操作。静态构造函数是在类中执行的第一个代码块。静态构造函数在类的生命周期中只执行一次。它被自动调用。静态构造函数不接受任何参数。它没有访问说明符。它不直接调用。
实例或公共构造
实例构造函数是用来初始化实例数据。每次创建类的对象时都会调用实例构造函数。它被明确地调用。实例构造函数接受参数。它有访问说明符。
- 1. 构造函数和静态函数
- 2. Objective C静态构造函数与动态构造函数
- 3. Java - 静态构造函数
- 4. 静态,内部和公共构造函数有什么区别?
- 5. C#实例构造函数与静态构造函数
- 6. 构造函数中的公共静态参数
- 7. 静态或公共构造函数的数据初始化
- 8. 静态导入和构造函数
- 9. 静态构造函数和继承
- 10. C++静态库和构造函数
- 11. Assembly.GetCallingAssembly()和静态构造函数?
- 12. 静态构造函数和BeforeFieldInit?
- 13. 静态构造函数和单
- 14. 静态和默认构造函数
- 15. Ninject和静态构造函数方法
- 16. C++只继承公共构造函数
- 17. 嵌套类的公共构造函数
- 18. AutoValue - 公共构造函数可能
- 19. 静态构造函数和共享数据
- 20. 构造函数内的构造函数
- 21. 构造函数中的调用基构造函数和其他构造函数
- 22. 在类中使用构造函数和公共函数
- 23. 静态构造函数有用
- 24. 静态构造函数的创建[Mono.Cecil]
- 25. 来自静态构造函数的Database.SetInitializer
- 26. 跟踪静态构造函数执行
- 27. 静态块内的构造函数
- 28. 模仿C++静态构造函数
- 29. 静态类C#构造函数OOP
- 30. 静态构造函数之前反射
保证被调用一次的静态构造函数?如果该类型在应用程序的生命周期内从未使用过,该怎么办? – MPritchard 2010-06-08 07:43:14
@Pritch,你是对的,在这种情况下,它不会被调用。但是,如果我不在我的应用程序中的任何地方使用(或引用)仪式,我甚至不需要担心课程正在做(或不做)的事情? – 2010-06-08 07:50:14
这一切都取决于你在构造函数中做什么 – MPritchard 2010-06-08 09:12:32