对于Class.a, 希望能达到这种效果:class classA{
  int a=1;
  private void testFun()
  {
     Console.write(this.a); //可以防问
     this.a++;         //本类函数,允许修改
  }
}class ClassB{
  private void testFun()
  {
     ClassA ca=new ClassA();
     Console.write(ca.a); //可以放问
     ca.a++;         //非本类函数,不允许修改
  }
}目前,我的类中,有大量关于本类的统计信息。 这些统计信息希望被其它类所访问,但是,又要避免被其它类修改。因为这些数据一旦被外部类非法修改,本类的运行就会也错,而且很难调试。我也知道,可以用可以在ClassA中定义如下模式来实现:
int A
{
  get
    {
       return this.a;  //把a定义为private,使得外部不可见
    }
}但是,这样一来,每一个变量都要增加一堆看起来很累赘的代码,郁闷。。而如果用readonly关键字,则在本类也只能在构造函数中修改。 而我的这些数据,在类的运行过程中,随时都在变,所以,readonly也搞不定请大虾指定一下,有没有其它比较简单一点点的办法????谢谢啦

解决方案 »

  1.   

    通过变量的名称来访问:using System.Reflection;
    class classA{
      int a=1;
      private void testFun()
      {
         Console.write(this.a); //可以防问
         this.a++;         //本类函数,允许修改
      }  public object this[string FieldName]
      {
    get
    {
    FieldInfo info = GetType().GetField(FieldName);
    return info.GetValue(this);
    }
      }
    }只是调用的时候需要对类型进行转换 
    class ClassB{
      private void testFun()
      {
         ClassA ca=new ClassA();
         Console.write(Convert.ToInt32(ca["a"])); //可以放问
         //ca.a++;         //非本类函数,不允许修改
      }
    }
      

  2.   

    谢谢,crossrowman(godi) 但是这样访问,需要用(int)将数据复原,操作起来有一点不爽。还没有在外部看起来,像一个public readonly变量一样,能读但不能改。 而在类部看来,又可以全程读写的变量定义方法????
      

  3.   

    目前我还有一种放问变量的方法。在classA中再定义一个classACount,每次统计时,重新为classACount类生成一个对象,在生成时就把变量一次性初试化了。 classACount中的所有变量,都采用public readonly模式。 外部访问时,获取classACount的对象就可以了。由于classACount的变量是readonly的,所以只能读,不能改。 也不会引发错误但是,这毕竟需要一定的代码来做这个处理,难道没有更直接的方法吗????
      

  4.   

    hehe ,ctrl+c~ctrl+v。
    或者自己写个自动生成属性代码到文本的工具。