读书人

【求】C#中protected用法和private用法

发布时间: 2012-07-24 17:47:58 作者: rapoo

【求高手指点】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分明是另一个对象的,关成员变量什么事情?!    }} 

读书人网 >C#

热点推荐