2010-12-14 121 views
2
namespace hi 
{ 
    class hithere 
    { 
     public int numberOne = 12; 
     private int numberTwo = 12; 

     static void yo() 
     { 
     } 
    } 
} 

有人能告诉我这段代码片段中变量numberOne和numberTwo之间的区别吗?公共和私有变量之间的区别

+0

哦,我如何更改我的名字从这个用户#########东西? – DarkLightA 2010-12-14 18:10:29

+2

编辑个人资料 – 2010-12-14 18:15:58

+0

感谢队友。不习惯有这样的用户名:) – DarkLightA 2010-12-14 19:05:26

回答

1

公共变量是从出侧类,但私单只为当前类和内部类访问访问:

public class VarClass 
{ 
    public int publicID = 10; 
    private int privateID = 100; 
    public VarClass() 
    { 
     Console.WriteLine(publicID); 
     Console.WriteLine(privateID); 
    } 

    public class InnerClass 
    { 
     public InnerClass() 
     { 
      VarClass c = new VarClass(); 
      Console.WriteLine(c.privateID); 
      Console.WriteLine(c.publicID); 
     } 
    } 
} 

public class OuterClass 
{ 
    public OuterClass() 
    { 
     VarClass c = new VarClass(); 
     Console.WriteLine(c.privateID); // Compile Error 
     Console.WriteLine(c.publicID); 
    } 
} 
2

其他对象可以访问NumberOne,但他们无法访问numberTwo。

所以我可以做Your_Object.numberOne = 14;但我不能做Your_Object.numberTwo= 14;

现在我也许能够通过反射取决于权限,可以在应用程序中设置访问numberTwo,但我不能直接。

Variables in C#
Reflection in C#
Accessors in C#

0

在一般情况下,公共交通工具的类以外的任何其他代码可以改变其值。 PRIVATE只能在类中使用/更改。此外,如果构建派生自其他类的类,并且希望子级别类能够使用/更改其父类的值,但不能使用类之外的其他通用代码,请使用PROTECTED。

5

accessibility levelsMSDN

公共访问不受限制。

保护访问被限制为包含的类或从 派生的包含类。

internal访问权限仅限于当前程序集。

保护的内部访问仅限于当前组件或从含 类派生 类型。

私有访问被限制为包含类型。

0

publicprivate是成员的访问修饰符。这是指谁可以通过代码直接访问成员。 public表示访问不受限制,以便任何人都可以通过代码直接访问该成员。 private表示访问仅限于包含类。所以每个人都可以直接通过代码访问numberOne,但只有包含的类才能直接通过代码访问numberTwo

public

共有5个访问改性剂是访问不限

protected:访问被限制为从包含类

internal导出的含有一个或多个类:访问限于含有的组件

protected internal:这是一个OR的protectedinternal使得访问仅限于包含类或从包含类派生的类或含组件

private:访问被限制为包含类

注意,条款“直接通过代码”是这里的关键;可以使用反射来访问这些成员。

C#规范的相关部分是§3.5,尤其是§3.5.2。

+0

'private:访问限于定义类'否,同样内部类 – 2010-12-14 18:21:02

+0

@Saeed:这是在定义类中。 – jason 2010-12-14 18:23:34

+0

最好说'像MSDN一样包含类型',因为它不是变量的定义者。 – 2010-12-14 18:25:56

0

搜索“封装”。 有这么多简单的材料来研究它。

1

简单来说numberOne被标记为公共意味着,如果您创建hithere类的实例,这个成员变量可以被访问。例如:

hithere h = new hithere() 
h.numberOne = 42; 

numberTwo是私人的手段,这是无法访问的,只能在hithere类中使用。因此,进一步考虑上述示例:

hithere h = new hithere() 
h.numberOne = 42; 
h.numberTwo = 84; 

最后一行会导致编译器错误,因为您无法访问numberTwo,因为它是私有的。

这可能是值得花一些时间访问修饰符读了起来,快速谷歌会找到很多例子,如:

http://www.devsource.com/c/a/Techniques/Understanding-C-Class-and-Member-Modifiers/ http://msdn.microsoft.com/en-us/library/ba0a1yw2 %28v = vs.80%29.aspx

此外,您的hithere类没有定义访问修饰符,因此编译器假定这是私有的。因此,如果您要从另一个引用您的库,则无法创建hithere类的实例。

0

这意味着,如果你有另一个类是这样的:

namespace hi 
{ 
    class hithere2 
    { 
     static void yo2() 
     { 
      hithere h = new hithere(); 
      h.numberOne = 2; 
      h.numberTwo = 3; 
     } 
    } 
} 

的第二个错误,但第一个是好的。