静态,内部和公共构造函数之间有什么区别?

时间:2011-08-10 07:06:58

标签: c# static constructor access-modifiers

静态,内部和公共构造函数之间有什么区别?为什么我们需要一起创建所有这些?

 static xyz()
 {
 }

 public xyz()
 {
 }

 internal xyz()
 {
 }

5 个答案:

答案 0 :(得分:13)

第一次实例化该类型的对象或调用静态方法时,将调用static构造函数。并且只会运行一次

所有其他类型

都可以访问public构造函数

只有同一程序集中的类型才能访问internal构造函数

除了这三个之外,还有protected只能从封闭类型派生的类型访问

protected internal只能访问同一个程序集中的类型或者从封闭类型派生的类型

private只能从类型本身和任何嵌套类型

访问

答案 1 :(得分:7)

publicinternal之间的区别在于internal构造函数只能在同一个程序集中调用,而public构造函数可以从其他程序集中调用同样。

static是一个只在第一次引用类时才被调用的构造函数。静态成员不属于该类的实例,而是属于“类本身”。有关static

的详情,请参阅http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx

答案 2 :(得分:3)

  • 静态构造函数只运行 - 在第一次使用类之前它只能访问类的静态成员
  • 每次使用new
  • 创建类的对象时,都会运行公共构造函数
  • 内部只是上面构造函数的另一个访问修饰符。它也可以是私人的。这与其他功能的访问修饰符完全相同。

您的代码实际上没有编译,因为内部和公共代码是具有不同修饰符的相同构造函数,您无法做到。您需要选择内部或公共(或私人)。

答案 3 :(得分:2)

第一次使用类型时会调用静态构造函数。无论是在静态上下文中还是通过创建实例。

创建新实例时会调用所有其他构造函数。修饰符只是确定哪些代码可以创建实例。

如果构造函数是私有的,则只有类本身和嵌套类型可以创建实例(可能在静态工厂方法中)。这类似于公共/私人/内部方法。

答案 4 :(得分:0)

您不需要创建所有类型的构造函数。访问修饰符提供与任何其他访问修饰符相同的功能 - 以确定如何访问构造函数。

  • 第一次静态访问类时将调用静态构造函数
  • 具有内部访问修饰符的构造函数只能由符合internal条件的项目调用,该条件“只能在同一程序集中的文件中访问”。
  • 具有公共访问修饰符的构造函数可由任何内容访问
  • 等等。 protectedprivate构造函数按预期运行 - 构造函数可供符合访问修饰符条件的项访问。