[英]Why can't I access private field in C#?
我试图弄清楚为什么我无法访问Program类中的私有字段?
class Program
{
int marks;
static void Main(string[] args)
{
Program p = new Program();
int s = p.marks;
Console.Read();
}
}
因为您是从同一类型中引用它。 如果您使用私有字段创建了其他类型,则无法在Program
访问它。
这不是违反封装规则吗? –学习数学
否。封装是通过定义类型来完成的。 Main
方法和字段marks
都存在于同一类型的Program
。
您可以访问声明了作用域(类)内的私有字段marks
-在您的情况下为Program
类。
不管是静态方法还是类的其他实例,都没有关系。 以下也将很好
class Program
{
int marks;
public int foo()
{
Program p = new Program();
return p.marks;
}
}
Main()
方法是Program
类型的成员,因此可以访问private
成员。
最简单的想法是,所创建的对象与所创建的类的类型相同。
阐明在这种情况下访问私有成员的有用性的另一件事是 ,考虑在要通过实现IClonable进行深度克隆的情况下,则可能需要复制对象的所有值,包括私有成员。 如果无法访问私有成员,则可能无法完全(深度)执行克隆。
此外,这篇文章: https : //stackoverflow.com/a/5231603/2696230提到了一个深思熟虑的观点,即
限制是在类级别而不是对象级别。
换句话说,私有成员不能在其类外部访问,而不能在内部访问,在这种情况下,您仍位于与所创建对象类型相同的类内部。
因为如果您在另一个类中,则您仍在同一Program类中,因此您的代码可以工作,并且可以操纵该代码来完成工作,但不建议这样做
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.