公共类,但私有成员变量? [复制]

Posted

技术标签:

【中文标题】公共类,但私有成员变量? [复制]【英文标题】:Public class, but private member variables? [duplicate] 【发布时间】:2015-05-04 00:18:13 【问题描述】:

我仍然在用 C# 找到自己的脚,并且有一个问题困扰了我一段时间。

假设我写了一个类并定义了一个属性如下:-

public class Employee

    string FirstName get; set;


class Program

    private static object GetTheEmployee()
    
        return new Employee FirstName = "Joe" 
    

为什么在 GetTheEmployee 方法中无法使用 FirstName,但是当我将 Employee 类中的 FirstName 'string' 变量更改为 'public string' 时,它可以从 Program 类中访问。

我本来以为如果我将类的访问修饰符声明为public,那么类中的所有变量默认也是public的?

【问题讨论】:

***.com/questions/12392876/class-vs-public-class 类成员的默认(未指定)是私有的。类的默认值是内部的。 msdn.microsoft.com/en-us/library/ms173121.aspx 【参考方案1】:

您将 class 声明为 public 的事实并不意味着 class 的所有成员也都是公开的。

默认情况下,类成员(字段、属性、方法等)具有private 访问修饰符,因此如果您没有将您的属性显式声明为public(或受保护、内部等),它将保持私密。

【讨论】:

非常感谢您的回答。所以你将一个类声明为public的唯一原因是你可以实例化该类的一个对象,但这并不意味着你可以设置该类的变量? @AngelaMarie-Daley 事实上,如果你想在包含它的程序集之外创建这个类的实例,类需要是公共的。默认情况下,类是内部的(并且可以在同一个程序集中实例化)。是的,类成员的访问修饰符独立于类访问修饰符。【参考方案2】:

我还以为如果我将类的访问修饰符声明为public,那么类中的所有变量默认也是public的?

他们不会。类成员的默认访问修饰符是private。如果要使它们成为public,则需要明确指定。

【讨论】:

以上是关于公共类,但私有成员变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥类成员是私有的而属性是公共的? [复制]

子类真的继承私有成员变量吗?

如何对类中的私有成员变量进行赋值和访问

Java子类访问父类的私有成员变量

使用公共成员变量的地址访问私有成员

如何使用 gmock 模拟修改 C++ 类中的私有变量的成员函数?