为什么可以';我不能访问C#中的私有字段吗?
我想弄明白为什么我不能访问类程序中的私有字段为什么可以';我不能访问C#中的私有字段吗?,c#,C#,我想弄明白为什么我不能访问类程序中的私有字段 class Program { int marks; static void Main(string[] args) { Program p = new Program(); int s = p.marks; Console.Read(); } } 因为您是从同一类型中引用它。如果您使用专用字段创建了其他类型,则无法在type程序中访问它 这不是违反了封装规则吗学习数
class Program
{
int marks;
static void Main(string[] args)
{
Program p = new Program();
int s = p.marks;
Console.Read();
}
}
因为您是从同一类型中引用它。如果您使用专用字段创建了其他类型,则无法在type
程序中访问它
这不是违反了封装规则吗学习数学
否。封装是通过定义类型来完成的。方法Main
和字段marks
都存在于同一类型的Program
中Main()
方法是Program
类型的成员,因此可以访问private
成员。您可以访问范围(类)内的私有字段marks
声明的位置-在您的示例中,类程序
不管它是静态方法还是类的其他实例。下面的内容也很好
class Program
{
int marks;
public int foo()
{
Program p = new Program();
return p.marks;
}
}
见:
私有成员只能在类或类的主体内访问
在其中声明它们的结构
变量是在类程序中声明的,这就是您访问它的地方。最简单的方法是,创建的对象与创建的类属于同一类型
另一件事要澄清访问私有成员的有用性,如本例中所示,请考虑如果您希望通过实现IClonable进行深度克隆,则可能需要复制对象的所有值,包括私有成员。如果无法访问私有成员,则可能无法完全(深入)执行克隆
此外,这篇文章:提到了一个深思熟虑的观点,那就是
限制在类级别,而不是对象级别
换句话说,私有成员在其类之外是不可访问的,而在类内部是不可访问的,这里的情况是,您仍然在与所创建对象类型相同的类中 因为您仍然在同一个程序类中,如果您在另一个类中,那么您的代码可以工作,并且可以操纵此代码来执行此任务,但不推荐使用此代码,因为您属于同一类型。如果您使用私有字段创建了另一个类型,则无法在typeProgram
@LearningMath中访问它,因为它与您使用它的类在同一个类中,私有字段在它们定义的类中可用这不是违反了封装规则吗?不,它封装在该类中。为什么类不能访问它自己的东西?你的意思是为什么C#有类范围的私有变量而不是对象范围的私有变量?