访问修饰符只限制类外部代码,类内部无访问隔离
我们前面学习理解到,类内部自由访问所有成员
接下来,我们学习在类的外部访问成员。
若要从类外部访问公有实例成员,必须使用「对象变量名.成员名」的点语法。
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,互不影响。
Previous: 访问修饰符
Next: 方法(Method)