方法一:Class t1
{
  public System.Windows.Forms.Form frmTest = null;
}
Class t2
{
  private void tt{
    t1 tt = new t1();
    tt.frmTest = this;
  }
}
方法二:Class t1
{
  private System.Windows.Forms.Form m_frmTest = null;
  public System.Windows.Forms.Form frmTest
  {
    set
    {
      m_frmTest = value;
    }
  }
}
Class t2
{
  private void tt{
    t1 tt = new t1();
    tt.frmTest = this;
  }
}
问一下,这两种赋对象的方式效果一样吗?

解决方案 »

  1.   

    LZ学习下OO的密封性。
    private System.Windows.Forms.Form m_frmTest = null;
    public System.Windows.Forms.Form frmTest
    {
      set
      {
        //此处可控制!
        m_frmTest = value;
      }
    }
      

  2.   

    方法一中叫字段方法二中叫属性
      
    不同的概念,属性描述的是数据读取和写入的规则。如方法二中frmTest属性没有实现get方法(读取),这样frmTest只能写,不能读。
    public class t1
    {
        private System.Windows.Forms.Form m_frmTest = null;
        public System.Windows.Forms.Form frmTest
        {
            set
            {
                m_frmTest = value;
            }
        }
    }
    public class t2
    {
        private void tt()
        {
            t1 tt = new t1();
            tt.frmTest = null;
            System.Windows.Forms.Form f = tt.frmTest; // ERROR
        }
    }尝试获取tt.frmTest的值则是无效的。
      

  3.   

    饿 对于楼主的两端代码 一段定义了公共变量,一个一定了一个实体字段;第二段里面出现了一个新的实体字段 frmTest 但是里面设置了  set{} 缺没有get{}建议 加入 get{retrun m_frmTest;}
      

  4.   

    效果真的一样吗?我以前是学VB的,在VB里有两种赋值方式:
    一种是把变量的值作为Copy赋给新变量(即ByVal方式),在这种方式下,新变量的值的改变不会影响原变量的值;
    另一种是把变量的值作为引用赋给新变量(即ByRef方式),在这种方式下,新变量的值的改变会影响原变量的值。不知道在C#里是怎么实现这两种赋值方式的。
      

  5.   

    回3楼:我只是为了偷懒,把get省略了。
      

  6.   

    to zswang:看一下我在6楼的内容,要怎样才能在C#中表达出来这两种区别?我的目的只需要赋,不需要计算。
      

  7.   


    在C#主要是两种类型“值类型”和“引用类型”
    引MSDN:如果数据类型在它自己的内存分配中存储数据,则该数据类型就是“值类型”。“引用类型”包含指向存储数据的其他内存位置的指针。你的例子中Form类型是class属于“引用类型”
    f = new Form();
    f1 = f;
    f2 = f1;
    并不会出现新的窗体,只是引用。这些东西好好看看MSDN就知道了。
      

  8.   

    LZ可以看看这个
    http://hi.baidu.com/mvnvm001/blog/item/df579d2c6ae469e88a1399a1.html
      

  9.   


    是不是在C#中,一旦定义了一个类型,那就已经知道这个类型是“值类型”还是“引用类型”?因为在VB中,“值类型”和“引用类型”只是在赋值过程中才决定的。如:Sub Main()
      Dim a = "111"
      Call test(a)
    End Sub
    Sub test(ByVal sValue)
      sValue = "222"
    End Sub以上是“值类型”的赋值,运行完Main函数后,a的值仍为"111";Sub Main()
      Dim a = "111"
      Call test(a)
    End Sub
    Sub test(ByRef sValue)
      sValue = "222"
    End Sub以上是“引用类型”的赋值,运行完Main函数后,a的值已变为"222"。
    既然在C#中
    f = new Form(); 
    f1 = f; 
    f2 = f1; 
    并不会出现新的窗体,只是引用。
    那要什么样的代码才会出现新的窗体?
      

  10.   

    姐姐,ByRef、ByVal是调用参数,是第三个概念。在C#是这样:
    public void test(int sValue) // 相当于ByValpublic void test(ref int sValue) // 相当于ByRefpublic void test(out int sValue) // 纯输出
    把什么是参数、什么是字段、什么是属性搞清楚先蹭点分我容易吗?