我现在要写个这样的东西,
就是有个容器类,里面有很多的item对象,每个item有Index,Index是只读属性,
请问有什么方法可以让容器类修改item.Index,但其他的类就只能访问Index。
delphi里就可以做到,只要把两个类放到同一个文件里就行。

解决方案 »

  1.   

    按delphi里的思路试试,类中类
      

  2.   

    其实可以这样间接弄
    Item类定义:m_index私有属性,暴露出internal属性ManageIndex{get{return m_index;}//get可加可不加 set{m_index=value;}},暴露出public,readonly属性Index{get{return m_index;}}这样只要你规定某些类不和item类在一个程序集,那么这些类只能访问到Index属性
    如果容器类和item类在一个程序集,那么容器类可以访问到ManageIndex从而修改m_index,但是访问Index属性是无法修改的只能读取
      

  3.   

    把一个类编程另外一个类的元素类,就是
    class a
    {
    class b
    {
    int c;
    }
    }
    a 可以访问b.c还有我记得有个friend的,不知道可以不可以做到。
      

  4.   

    codepublic class Item
    {
       private int m_index;   internal int ManageIndex
       {
          get {return m_index;} //可加可不加
          set { m_index = value;}
       }
       
       public int Index
       {
          get {return m_index;}
       }
    }protected class Container
    {
       public void SetItemIndex(Item x,int newindex)
       {
          x.ManageIndex = newindex;
       }
       public int GetItemIndex(Item x)
       {
          return x.Index;   
       }
    }
    -----以上在程序集1,以下是程序集2-------------引用程序集1
    public class Guest
    {
       public int GetItemIndex(Item x)
       {
         return Index;
       }
    }
      

  5.   

    两种思路,一种是做成嵌套类
    另一种是将item封装成单独的程序集
    在容器类程序集中添加
    [assembly:InternalsVisibleTo("")]