谈谈C#的私有成员的一个有趣的现象!
2009-02-18 14:22
260 查看
大家都知道,一个类的私有成员只能在他的内部访问!
但是不知道大家注意到没有,实际上在C#中一个类的实例是可以访问同一个类的另外一个实例的私有成员的。
请看这段简单的代码
public class MyClass
{
private int i = 0;
public void Function()
{
MyClass a = new MyClass();
Console.WriteLine( a.i); //这里成功访问了另外的一个实例a的私有实例字段
}
}
大家也可以自己写一段类似的代码来测试一下,的确是可以访问另外一个实例的私有成员!
为什么呢?因为C#就是一开始就是这样设计的。实际上这个设计在某种程度上破坏了对象的封装性,其他的面向对象的语言可能就没有做这样的设计了。
希望大家可以注意到这个问题,为了保证对象良好的封装性,最好不要这样访问啊!
但是不知道大家注意到没有,实际上在C#中一个类的实例是可以访问同一个类的另外一个实例的私有成员的。
请看这段简单的代码
public class MyClass
{
private int i = 0;
public void Function()
{
MyClass a = new MyClass();
Console.WriteLine( a.i); //这里成功访问了另外的一个实例a的私有实例字段
}
}
大家也可以自己写一段类似的代码来测试一下,的确是可以访问另外一个实例的私有成员!
为什么呢?因为C#就是一开始就是这样设计的。实际上这个设计在某种程度上破坏了对象的封装性,其他的面向对象的语言可能就没有做这样的设计了。
希望大家可以注意到这个问题,为了保证对象良好的封装性,最好不要这样访问啊!
相关文章推荐
- C#中有趣的的四舍五入现象和一个简单的解决方案
- 在中断函数和MAIN函数中同时调用同一个函数的有趣现象
- Java学习笔记_反射_Class.forName()加载并修改一个类的私有成员变量
- C++ 的一个问题的理解(私有变量成员)
- 一个有趣的C#正则替换问题
- 来看一个费解而有趣的c++现象
- 谈谈vc如何写dll(封装性,隐藏头文件,私有成员)
- C#学习小记5 一个有趣的程序关于复载property
- C#属性详解(c# 通过公共属性访问私有成员 优点)
- 11.8 编写一个程序,有一个汽车类 vehicle,它具有一个需传递参数的构造函数,类 中的数据成员:车轮个数 wheels 和车重 weight 放在保护段中;小车类 car 是它的私有派生 类,
- C#访问及调用类中私有成员与方法示例代码
- 编写一个程序设计一个汽车类vehicle,包含的私有数据成员有车轮个数wheels和车重weight
- [深夜原创]C# Monitor通知机制的一个有趣的实例
- 一个关于思科路由器ping的有趣现象
- 使用C#反射机制访问类的私有成员【转】
- 设计一个日期类Date,,要求: (1)包含年(year)、月(month)和日(day)私有数据成员。 (2)包含构造函数,重载关于一日期加上天数的加法运算符+、重载关于一日期减去天数的减加运算符-
- 一个C/C++结构体初始化有趣的现象
- C#反射:让私有成员无所遁形
- C#--第九周实验--任务2--定义一个静态成员方法,该方法实现字符串反转。
- 编写一个矩形类,私有数据成员为矩形的长( len)和宽(wid),wid设置为0,有参构造函数设置和的值,另外,类还包括矩形的周长、求面积、取矩形的长度、取矩形的长度、取矩形的宽度、修改矩形的长度和宽度为对应的形参值等公用方法。