首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

【求】C#中protected用法和private用法如何有些地方这么相同?

2012-07-24 
【求高手指点】C#中protected用法和private用法怎么有些地方这么相同??protected用法是:访问仅限于包含类或

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

热点排行