namespace hi
{
class hithere
{
public int numberOne = 12;
private int numberTwo = 12;
static void yo()
{
}
}
}
在此代码摘录中有人能告诉我变量numberOne和numberTwo之间的区别吗?
答案 0 :(得分:5)
公开访问不受限制。
protected 访问权限仅限于包含的类或派生类型 包含类。
内部访问仅限于当前程序集。
受保护的内部访问仅限于当前程序集或 从包含派生的类型 类。
私人访问仅限于包含类型。
答案 1 :(得分:2)
其他对象可以访问NumberOne,但无法访问numberTwo。
所以我可以Your_Object.numberOne = 14;
,但我不能Your_Object.numberTwo= 14;
现在我可以通过反射访问numberTwo,具体取决于应用程序中设置的权限,但我无法直接访问。
答案 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)
public
和private
是成员的访问修饰符。这指的是谁可以通过代码直接访问成员。 public
表示访问不受限制,以便任何人都可以通过代码直接访问该成员。 private
表示访问仅限于包含类。因此,每个人都可以直接通过代码访问numberOne
,但只有包含的类可以直接通过代码访问numberTwo
。
总共有五种访问修饰符:
public
:访问权限不受限制
protected
:访问仅限于包含类或从包含类
internal
:访问仅限于包含程序集
protected internal
:这是protected
和internal
的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;
}
}
}
第二个错误,但第一个是好的。