类外部访问成员

访问修饰符只限制类外部代码,类内部无访问隔离

我们前面学习理解到,类内部自由访问所有成员

接下来,我们学习在类的外部访问成员。

若要从类外部访问公有实例成员,必须使用「对象变量名.成员名」的点语法。

class Program
{
    static void Main(string[] args)
    {
        Worker worker = new Worker(); //创建对象
        int hours = worker.GetHours(); //通过对象名,访问public函数
        worker.hours = 12; //通过对象名,给public变量赋值
        Console.WriteLine(worker.hours); //你当成一个变量一样直接读取
    }
}

class Worker
{
    int age;
    private double savings;
    public int hours;

    void ReadSavings()
    {
        Console.WriteLine(savings);
    }

    public int GetHours()
    {
        return hours;
    }
}Code language: C# (cs)

Worker 的方法GetHours标记为 public,因此外部可读写;

Program 类的 Main 方法创建 Worker 对象worker

可以通过对象名worker ,对象名相当于指针,里面存储了引用(地址),通过这个对象名,然后使用点号. 可以访问公开的成员。

外部访问实例成员格式:对象变量.公有字段/公有方法()

private 成员无法在类外部通过点语法访问

如果在类的外面,试图访问私有成员(字段、函数)直接报错。

错误例子

class Program
{
    static void Main(string[] args)
    {
        Worker worker = new Worker(); 
        int hours = worker.GetHours(); 
        worker.hours = 12;
        Console.WriteLine(worker.hours);

        worker.ReadSavings();
        worker.age = 20;
        worker.savings = 1000000000.0;
    }
}

class Worker
{
    int age;
    private double savings;
    public int hours;

    void ReadSavings()
    {
        Console.WriteLine(savings);
    }

    public int GetHours()
    {
        return hours;
    }
}Code language: C# (cs)

再看一个例子

class Rectangle
{
    // 公有实例字段:长 Length、宽 Width
    public int Length, Width;

    // 实例方法:计算并返回矩形面积
    public int GetArea()
    {
        return Length * Width;
    }
}

class Program
{
    static void Main()
    {
        // 创建两个独立矩形实例
        Rectangle rect1 = new Rectangle();
        Rectangle rect2 = new Rectangle();

        // 分别给两个矩形的长宽赋值,数据相互隔离
        rect1.Length = 10; rect1.Width = 5;
        rect2.Length = 8;  rect2.Width = 7;

        // 读取长宽、调用方法输出面积
        Console.WriteLine("矩形1:长{0},宽{1},面积{2}", rect1.Length, rect1.Width, rect1.GetArea());
        Console.WriteLine("矩形2:长{0},宽{1},面积{2}", rect2.Length, rect2.Width, rect2.GetArea());
    }
}Code language: C# (cs)

这是一个矩形的类,里面两个公开的字段,Length和Width,分别存储矩形的长宽。还有一个函数GetArea 返回矩形的面积。

它们都是公开的。

执行结果

矩形1:长10,宽5,面积50
矩形2:长8,宽7,面积56

在内存中是这样存储

两个对象,是独立存储的,各自有各自的Length 和Width,互不影响。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注