namespace hi
{
class hithere
{
public int numberOne = 12;
private int numberTwo = 12;
static void yo()
{
}
}
}
有人能告诉我这段代码片段中变量numberOne和numberTwo之间的区别吗?公共和私有变量之间的区别
namespace hi
{
class hithere
{
public int numberOne = 12;
private int numberTwo = 12;
static void yo()
{
}
}
}
有人能告诉我这段代码片段中变量numberOne和numberTwo之间的区别吗?公共和私有变量之间的区别
公共变量是从出侧类,但私单只为当前类和内部类访问访问:
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);
}
}
其他对象可以访问NumberOne,但他们无法访问numberTwo。
所以我可以做Your_Object.numberOne = 14;
但我不能做Your_Object.numberTwo= 14;
现在我也许能够通过反射取决于权限,可以在应用程序中设置访问numberTwo,但我不能直接。
在一般情况下,公共交通工具的类以外的任何其他代码可以改变其值。 PRIVATE只能在类中使用/更改。此外,如果构建派生自其他类的类,并且希望子级别类能够使用/更改其父类的值,但不能使用类之外的其他通用代码,请使用PROTECTED。
公共访问不受限制。
保护访问被限制为包含的类或从 派生的包含类。
internal访问权限仅限于当前程序集。
保护的内部访问仅限于当前组件或从含 类派生 类型。
私有访问被限制为包含类型。
public
和private
是成员的访问修饰符。这是指谁可以通过代码直接访问成员。 public
表示访问不受限制,以便任何人都可以通过代码直接访问该成员。 private
表示访问仅限于包含类。所以每个人都可以直接通过代码访问numberOne
,但只有包含的类才能直接通过代码访问numberTwo
。
public
:
共有5个访问改性剂是访问不限
protected
:访问被限制为从包含类
internal
导出的含有一个或多个类:访问限于含有的组件
protected internal
:这是一个OR的protected
和internal
使得访问仅限于包含类或从包含类派生的类或含组件
private
:访问被限制为包含类
注意,条款“直接通过代码”是这里的关键;可以使用反射来访问这些成员。
C#规范的相关部分是§3.5,尤其是§3.5.2。
'private:访问限于定义类'否,同样内部类 – 2010-12-14 18:21:02
@Saeed:这是在定义类中。 – jason 2010-12-14 18:23:34
最好说'像MSDN一样包含类型',因为它不是变量的定义者。 – 2010-12-14 18:25:56
搜索“封装”。 有这么多简单的材料来研究它。
简单来说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
类的实例。
这意味着,如果你有另一个类是这样的:
namespace hi
{
class hithere2
{
static void yo2()
{
hithere h = new hithere();
h.numberOne = 2;
h.numberTwo = 3;
}
}
}
的第二个错误,但第一个是好的。
哦,我如何更改我的名字从这个用户#########东西? – DarkLightA 2010-12-14 18:10:29
编辑个人资料 – 2010-12-14 18:15:58
感谢队友。不习惯有这样的用户名:) – DarkLightA 2010-12-14 19:05:26