c# 的作用域问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 05:00:58
class Program
{
static void Main(string[] args)
{

}

class A
{
protected int x;
static void f(B b, A a) { b.x = 1; a.x = 1; }
}

class B:A
{
static void f(B b, A a) { b.x = 1; a.x = 1; }
}
}

为什么B类方法f里的a.x=1是不对的?通不过编译!
msdn里是这么写的:
protected 关键字是一个成员访问修饰符。受保护成员在其所在的类中可由派生类实例访问
是什么意思呢?

static void f(B b, A a) { b.x = 1; a.x = 1; } 中,A a的定义之后,a.x企图访问的是相当于private的protected成员,所以是不能编译的。

protected和private的区别在于private不能被继承,protected可以被继承,但是当声明A a之后,a.x对于类B来说,仍然是A内部的“私有”成员,虽然不是用private声明的。

这里有两个概念要清晰:1.声明一个包含了保护成员的类变量并且使用它(是不能使用这个保护成员的);2.继承了一个包含了保护成员的类然后使用它(其实只能使用这个保护成员的结构而已)

实际上只能使用这个保护成员的结构,而不代表当这个被继承的基类的保护成员允许在这个衍生类(子类)中声明的时候也可以访问。

你怎么这样写呢,你要表达什么意思

protected int x;
你的修饰符是protected,也就是说是受保护的,只能在本类内部访问。

protected修饰的成员变量必须由派生类的实例来访问.