C# 在子类中调用不到父类的protected成员?

classProgram{staticvoidMain(string[]args){Atest=newA();test.age=18;}}classA{protected... class Program

{
static void Main(string[] args)
{
A test = new A();
test.age=18;
}
}
class A
{
protected int age;
}
错误 1 “TestProtected.A.age”不可访问,因为它受保护级别限制
这个错误原因我是知道的,但是请看下面的程序:
class Program:A

{
static void Main(string[] args)
{
A test = new A();
test.age=18;
}
}
class A
{
protected int age;
}
错误 1 无法通过类型“TestProtected.A”的限定符访问保护成员“TestProtected.A.age”;限定符必须是类型“TestProtected.Program”(或者从该类型派生)的 D:\C#_test\MyFirstSolution\TestProtected\Program.cs 13 18 TestProtected

下面的程序中Program类已经继承了A类,但是还是test.age还是不能访问到,而且报的错误还跟上面的程序不一样,请问第二个程序中为什么访问不到age?如果原因跟第一个一样,为什么报错会不同?
展开
 我来答
freeeeeewind
2014-09-15 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1431万
展开全部
//先看正确的例子
    class Program : A
    {
        static void Main(string[] args)
        {
            Program test = new Program();
            //这样可以正确访问基类中的protected成员
            test.age = 10;
        }
    }
    class A
    {
        protected int age;
    }

-------

对基类中protected成员的访问,必须满足:

基类中的protected成员,只能从(Ⅰ)基类内部非静态方法访问(Ⅱ)继承这个基类的子类内部的非静态方法访问

-------

1)在问题中第1个程序中的错误是因为:你试图从A类的外部访问A内的protected成员。

2)在问题中第2个程序中的错误是因为:虽然将类Program作为A的子类,但你试图从子类的静态方法(即Main方法)访问基类的protected成员。

追问
谢谢,不过还是不太明白,我又试了试,用非静态方法访问。在另一个问题里,麻烦您再去看一下吧。
squall0423
2014-09-22 · TA获得超过2814个赞
知道小有建树答主
回答量:866
采纳率:33%
帮助的人:583万
展开全部
A test = new A();声明出来的是一个新的类,和你继承的没有关系,所以会报错
想用继承类A的protected变量,可以用 this.age
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kcxnvbdbd
2014-09-15 · TA获得超过523个赞
知道小有建树答主
回答量:885
采纳率:50%
帮助的人:632万
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光的雷咩咩
2014-09-15 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:8153万
展开全部
最好不要用Program继承自其他类,试试其他的吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式