公共和私人变量之间的差异

时间:2010-12-14 18:10:00

标签: c# access-modifiers

namespace hi
{
    class hithere
    {
         public int numberOne = 12;
         private int numberTwo = 12;

         static void yo()
         {
         }
    }
}

在此代码摘录中有人能告诉我变量numberOne和numberTwo之间的区别吗?

8 个答案:

答案 0 :(得分:5)

来自accessibility levelsMSDN

  

公开访问不受限制。

     

protected 访问权限仅限于包含的类或派生类型   包含类。

     

内部访问仅限于当前程序集。

     

受保护的内部访问仅限于当前程序集或   从包含派生的类型   类。

     

私人访问仅限于包含类型。

答案 1 :(得分:2)

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

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

现在我可以通过反射访问numberTwo,具体取决于应用程序中设置的权限,但我无法直接访问。

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

答案 2 :(得分: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类的实例。

答案 3 :(得分: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);
    }
}

答案 4 :(得分:0)

一般来说,PUBLIC意味着类外的任何其他代码都可以更改其值。 PRIVATE只能在类本身中使用/更改。此外,如果您构建从另一个派生的类,并且您希望子级别的类能够使用/更改其父级的值,而不是该类之外的其他通用代码,请使用PROTECTED。

答案 5 :(得分:0)

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

总共有五种访问修饰符:

public:访问权限不受限制

protected:访问仅限于包含类或从包含类

派生的类

internal:访问仅限于包含程序集

protected internal:这是protectedinternal的OR,因此访问仅限于从包含类或包含程序集派生的包含类或类

private:访问仅限于包含类

请注意,“直接通过代码”这一条款在这里至关重要;可以使用反射访问这些成员。

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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

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