C# 为什么即使我有自动实现的属性{get;set;},我也不能访问私有字段?

C# 为什么即使我有自动实现的属性{get;set;},我也不能访问私有字段?,c#,C#,我试图在网站上搜索这个问题,但找不到答案。我查看了有关自动实现属性的MSDN文档,提供的示例只是类中的公共字段。我的示例类: public class Area { private bool enabled { get; set; } } 每当我尝试从另一个类访问该类的enabled字段时,我都会收到一个错误,Area.enabled由于其保护级别而不可访问。我不明白为什么它是不可访问的,因为自动实现的属性是编写的,即使我的字段是私有的,我也有get和set?这里的是一个私有的自动实现

我试图在网站上搜索这个问题,但找不到答案。我查看了有关自动实现属性的MSDN文档,提供的示例只是类中的公共字段。我的示例类:

public class Area
{
    private bool enabled { get; set; }
}

每当我尝试从另一个类访问该类的enabled字段时,我都会收到一个错误,Area.enabled由于其保护级别而不可访问。我不明白为什么它是不可访问的,因为自动实现的属性是编写的,即使我的字段是私有的,我也有get和set?

这里的是一个私有的自动实现的属性,而不是字段

本质上类似于:

私有布尔值已启用;//田野 已启用私有布尔//属性声明 { 获取{return\u enabled;}//属性getter 设置{u enabled=value;}//属性设置器 } 除了字段名没有启用,但是:一些不可命名的东西

自动实现的属性中的字段始终是私有的;这里的财产也是私有的。拥有私有财产是非常普遍的。所以:事实上,这将是无法进入的地区以外


如果这不是有意的:使用一个更宽松的可访问性;受保护的、内部的、公共的等等。

这里您拥有的是一个自动实现的私有属性,而不是字段

本质上类似于:

私有布尔值已启用;//田野 已启用私有布尔//属性声明 { 获取{return\u enabled;}//属性getter 设置{u enabled=value;}//属性设置器 } 除了字段名没有启用,但是:一些不可命名的东西

自动实现的属性中的字段始终是私有的;这里的财产也是私有的。拥有私有财产是非常普遍的。所以:事实上,这将是无法进入的地区以外


如果这不是有意的:使用一个更宽松的可访问性;受保护、内部、公共等。

每当我试图从另一个类访问该类的启用字段时-如果您认为可以从其他类访问此类成员,您认为私有是什么意思?您不能访问该属性本身,因为您将其声明为私有。您的属性本身是私有的,请首先查看,您需要了解什么是私有的意思?get和set与属性可见性没有关系。每当我尝试从另一个类访问此类的enabled字段时-如果您认为可以从其他类访问此类成员,您认为私有是什么意思?您无法访问属性本身,当您将其声明为私有时。您的属性本身是私有的,首先,您需要了解什么是私有的意思?get和set与属性可见性没有关系。因此,声明字段private与编写getter和setter方法或使用,内部访问修饰符?@cptalpdeniz您似乎混淆了访问修饰符的概念与字段和属性的概念。字段是类型的简单成员。属性是具有getter和setter的成员,getter和setter是可以执行任何操作的成员方法。如果它是一个自动属性,那么getter和setter由编译器实现,以返回或设置一个具有编译器生成的名称的字段,而编译器生成的名称是您看不到的。另一方面,所有这些成员都可以有访问修饰符来声明谁可以访问这些成员。那么,声明字段private和编写getter和setter方法或使用,内部访问修饰符?@cptalpdeniz您似乎混淆了访问修饰符的概念与字段和属性的概念。字段是类型的简单成员。属性是具有getter和setter的成员,getter和setter是可以执行任何操作的成员方法。如果它是一个自动属性,那么getter和setter由编译器实现,以返回或设置一个具有编译器生成的名称的字段,而编译器生成的名称是您看不到的。另一方面,所有这些成员都可以具有访问修饰符,这些修饰符声明谁可以访问这些成员。