class A 其对象为 a
class B 其对象为 b
class C 其对象为 c功能要求:
b能访问a中的变量
c不能访问a中的变量我知道有一个方法:
A中变量可见性设为protected
然后让B继承A
而C不继承以A为根的类系列
即可实现功能要求。但我现在的情况是:
A并不是B的父类,
那么问题就是
还有其他的方式可以实现所需功能吗?

解决方案 »

  1.   

    namespace ab
    {
      class A
      {
       public t1;
       public t2;
       }
       class B
      {
       可以访问a
      }
    }
    namespace Cname
    {
       public c
       {
       不可以访问a
       }
    }
      

  2.   

    把a和b放在一个namespace中,然后把a中的变量设为包可见的(java中是friendly,c#中是internal),c不再包内,就可以了
      

  3.   

    hdt(接分接出个星星) 理解的好像有些偏颇奥,当c引入了ab所在的namespace后还是可以访问的,我想搂住的意思是可见性问题
      

  4.   

    一个namespace 中不是public 的类,外部引用了这个namespace ,也无法访问
      

  5.   

    to: 回复人: Amitt(魔流剑) ( ) 信誉:100  2005-04-27 10:33:00  得分: 0  
    1,定义一个接口,用于返回变量值,
    2,A类中实现该接口。
    3,B类接受一个该接口的引用参数。不知可不可行?----》
    这样的话,因为接口是公开的,
    那么C也同样可以引用该接口,实现访问a中的变量啊我的另一个思路是:
    A中变量可见性设为private(或protected)
    然后替该变量加上个访问方法如:GetValueFormA(object AccessClass)
    访问时就可进行类别验证控制返回值,
    但这样的话其他类也是可以伪造问题重新明确一下好了:
    构建一个类A,
    让A可以自己指定某一类B可以访问A中的某些变量
    而其他类却不能访问A中的变量 
      

  6.   

    to 回复人: thundersoft(神州春雷) ( ) 信誉:100  2005-04-27 10:47:00  得分: 0  
    hdt(接分接出个星星) 理解的好像有些偏颇奥,当c引入了ab所在的namespace后还是可以访问的,我想搂住的意思是可见性问题---->
    That's Right!thundersoft(神州春雷) 真是懂我啊
      

  7.   

    你可以class A 和 class B 定义在一个DLL中 把class C 定义在另一个DLL中,然后class A中不想让C访问的变量都加上internal就可以了。
      

  8.   

    class A
    {
    int intA=100;
    public int Get_intA(Object o)
    {
    if(o is B)
    return intA;
    else
    return 0;
    }
    }
    class B
    {
    public int Get_intA()
    {
    A a =new A ();
    return a.Get_intA (this);
    }
    }private void Form1_Load(object sender, System.EventArgs e)
    {
    B b=new B ();
    MessageBox.Show (b.Get_intA ().ToString ());
    }
      

  9.   

    class C里面如果不定义具体函数,自然不能访问class A里的intA