上面说道出于封装性的考虑,我们对基类成员既可以设置成protectde成员,又可以设置为private成员设置公有属性。那么,这两种设置方法有什么区别呢?区别是很明显的,就是protectde只能在派生类中引用,不能为外界引用,而private成员的公有属性不仅可以被派生类引用,而且为外界调用。为了说明上述问题,我们来用上述程序做个例子。
先看看protectde的例子:
我们在苏非类中使用了protected定义了age属性。
[C#] 纯文本查看 复制代码 class Sufei
{
//变量成员
public string name;
protected int age;
.........
然后,我们在派生类SufeiSenior.cs类中使用age,程序是没有任何问题的。
[C#] 纯文本查看 复制代码 class SufeiSenior:Sufei //苏菲基类派生出高级会员
{
//私有成员
private int moneyValue = 0;//高级会员有钱
private int powerValue = 0;//有钱任性,赋予等级
//构造函数
public SufeiSenior()
{
age = 40;
moneyValue++;
Console.WriteLine("我的会员金钱为:{0}",moneyValue );
powerValue++;
Console.WriteLine("我的会员等级为:{0}",powerValue);
}
注意,这里的age只能在派生类中作为成员变量在构造函数中使用,而不能在函数外使用。看图:
字段错误
如果,你把age直接在progam.cs主程序中运行也会出现错误,因为age只能在派生类SufeiSeniors中使用。
[C#] 纯文本查看 复制代码 class Program
{
static void Main(string[] args)
{//申明对象wwwconsumer
SufeiSenior wwwconsumer = new SufeiSenior();
//访问基类数据成员
wwwconsumer.age = 40;
wwwconsumer.name = "wwwconsumer"
//访问基类成员
wwwconsumer.WriteAticle();
wwwconsumer.JiangLi();
wwwconsumer.JiangLi();
//访问派生类成员
wwwconsumer.vote();
wwwconsumer.send();
wwwconsumer.upload();
visual studio直接提示错误
直接使用错误
如果将private成员设置成公有属性后,实际上就是不直接使用private私有成员,而是在程序中通过修一个与private的栈道,达到暗度陈仓的目的。其实,编程的思路在这里已经是放弃了对private的明攻,而转为暗取了。
我们还是回到Sufei.cs基类中:
[C#] 纯文本查看 复制代码 class Sufei
{
//变量成员
public string name;
private int age;
public int Age
{
get
{
return age;
}
set
{
if (value <= 0)
age = 0;
else
age = value;
}
}
看到了,我们在这里修了一个大写的Age栈道,但目的还是为了达到偷到成仓age的目的。
我们在主程序中就可以直接引用Age成员了。就这么简单。
[C#] 纯文本查看 复制代码
class Program
{
static void Main(string[] args)
{//申明对象wwwconsumer
SufeiSenior wwwconsumer = new SufeiSenior();
//访问基类数据成员
wwwconsumer.Age = 40;
wwwconsumer.name = "wwwconsumer";
//访问基类成员
其实,再想想,由于Age属于公有属性,不仅在主程序中,甚至在派生类中也可以引用,它本来就是公有属性的字段嘛。 |