2011-08-10 32 views
11

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

static xyz() 
{ 
} 

public xyz() 
{ 
} 

internal xyz() 
{ 
} 
+1

你并不需要创建他们。 – Otiel

+19

为什么倒票?所以他不知道什么,大莳萝,这不像他问一个愚蠢的问题。 –

+0

@Gilad - 一个简单的谷歌将提供明确答案的问题不是一个好问题。 – Oded

回答

8

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

公共构造是所有其他类型

内部构造访问只有在同一程序

这三个还有受保护的顶部访问类型是唯一进入从封闭类型

和受保护的内部派生类型是仅在同一组件可访问类型或那些从封闭类型派生

一个d私人这与类型本身和任何嵌套类型仅可访问

+0

受保护的内部只能由同一个程序集中的类型访问,或者从包含类型(其他程序集)派生,而不是“派生...”。 –

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

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

7

publicinternal之间的区别在于,internal构造函数只能从同一组件内被调用,而public一个可以从其他组件如被称为好。

static是一个只在第一次引用类时才被调用的构造函数。静态成员不属于类的实例,而是“属于类本身”。有关static的更多信息,请参阅http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx

2

静态构造函数被称为第一次使用类型。无论是在静态环境中还是通过创建实例。

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

如果你的构造函数是私有的,只有类本身和嵌套类型可以创建一个实例(也许在静态工厂方法中)。这就像公共/私人/内部方法一样工作。

+1

士兵也暴露于嵌套类型 –

+0

有没有什么办法来迫使通用类型T的“使用”无构造一个实例? – supercat

+1

我不明白你的问题。你可以用一个通用的参数声明一个静态方法:'public static T Get ()'。这样你就必须在调用方法时指定通用参数。如果你的类有一个通用参数,你必须在类上指定它。像'SomeClass .Do()'。 – Zebi

0

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

  • a 静态构造函数将首次被静态调用。
  • 构造函数内部访问修饰符只能由满足internal标准的项目调用,该标准“仅在同一个程序集中的文件中可访问”。
  • 构造函数与公开访问修饰符可以被任何东西访问
  • 等等。 protectedprivate构造操作如您所愿 - 构造函数是满足对访问修饰符的条件的项目进行访问。
相关问题