【求高手指点】C#中protected用法和private用法怎么有些地方这么相同??
protected用法是:访问仅限于包含类或从包含类派生的类型;
private用法是:访问权限仅限于此类中;
下面是我写了一个简单代码,令我不解的是:如果在父类中声明一个属性用protected修饰,我在子类中如果想调用父类中被protected修饰的属性时,必须先将父类中的被protected修饰的属性进行封装才可以。
如果不对父类中被protected修饰的属性进行封装的话:
程序就会报错:“错误 无法通过类型“ConsoleApplication3.BaseTest”的限定符访问保护成员“ConsoleApplication3.BaseTest.b”;限定符必须是类型“ConsoleApplication3.ChildTest”(或者从该类型派生)的“
这是为什么啊?怎么protected的用法和private的用法都一样啊??搞不懂啊!!(以下是代码)
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication3
{
/// <summary>
/// 父类
/// </summary>
class BaseTest
{
public int a = 10;
//如果不对protected b进行封装的话,会报错
protectedint b = 2;
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication3
{
/// <summary>
/// 子类
/// </summary>
class ChildTest:BaseTest
{
int c;
int d;
public void printTest()
{
BaseTest basetest = new BaseTest();
this.a = basetest.a;
//当程序走到这一步时就不报错!不知道怎么回事(感觉怎么和private用法差不多啊,别的类调用时进行封装才可以)
this.c = basetest.b;
}
}
}
------解决方案--------------------
开玩笑。
你老酒喝多了?这个和什么private以及prodected都没有关系。
原因是你根本就没搞清楚限定符是做什么的。
比如说private,它的作用是使得成员变量私有。成员变量是什么???怎么可能是另一个对象的成员变量呢?
比如说:
C# code
class A
{
private int a = 0;
public void foo(A other_a)
{
a = 1; // a是成员变量
other_a.a = 2; // error, 这个a分明是另一个对象的,关成员变量什么事情?!
}
}