谁能解开这个迷团??

5200 2003-08-22 02:22:17
不是说保护成员可以在类的派生类中访问吗,下面的代码为什么不行??

using System;
class Vehicle{
public int cctv;
protected int cnn;//保护成员 
void F(){
cctv=3;
cnn=4;
}
}
class Car:Vehicle{
int fox;
Vehicle v1=new Vehicle();
void G(){
v1.cctv=4;
v1.cnn=5;//此处无法通过编译,
}
}

说是无法通过类型“Vehicle”的限定符访问保护成员“Vehicle.cnn”;限定符必须是类型“Car”(或者从该类型派生)的

谁来解释一下???
...全文
111 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zengqf_W 2003-08-22
  • 打赏
  • 举报
回复
Base.cnn = 5
alphawin 2003-08-22
  • 打赏
  • 举报
回复
gz
janus1999 2003-08-22
  • 打赏
  • 举报
回复
同意上面几楼的
fq_ln 2003-08-22
  • 打赏
  • 举报
回复
象楼上叙述的那样
你定义了一个Vehicle类的实例,那么你想访问这个实例的保护成员,当然不能访问了。

既然你后一个类从Vehicle继承,那么不必定义基类的实例。

这些概念一定要记住喽。
要知道,如果你的某个类从一个类继承,那么你可以访问基类中所有公开成员和保护成员.私有成员不能访问.
dmn 2003-08-22
  • 打赏
  • 举报
回复
1、确实,显然你在Car类中用了Vehicle类的保护成员,这种情况不管Car和Vehicle是什么关系都不允许。
2、另外,我的理解是:若A类有protect修饰的成员(不论是变量还是方法)Fa,不是说其派生类B通过A的实例来访问Fa,而是在B从A继承的时候,可以继承Fa,当然B类的方法也可以使用Fa。这种情况下如gOODiDEA(无语) 所给的示例。
gujianxin 2003-08-22
  • 打赏
  • 举报
回复
Vehicle v1=new Vehicle();
你这可不是继承

base.cnn = 5;

这才叫呢
xiaodele 2003-08-22
  • 打赏
  • 举报
回复
你在car类中调用了Vehicle实例,在实例当中当然不能调用他的保护成员了
但是你可以通过base.cnn访问。
gOODiDEA 2003-08-22
  • 打赏
  • 举报
回复
class Car:Vehicle{
int fox;
Vehicle v1=new Vehicle();
void G(){
v1.cctv=4;
//v1.cnn=5;//此处无法通过编译
cnn=5//CCTV和CNN是它自身的成员

}
}
极限999 2003-08-22
  • 打赏
  • 举报
回复
up
jjcccc 2003-08-22
  • 打赏
  • 举报
回复
like this:

class Car:Vehicle{
int fox;
void G(){
cctv=4;
cnn=5;//可以通过编译,
}
}

因为Car已经继承了Vehicle,所以Vehicle保护成员就可以直接使用阿。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧