方法一: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;
}
}
问一下,这两种赋对象的方式效果一样吗?
{
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;
}
}
问一下,这两种赋对象的方式效果一样吗?
private System.Windows.Forms.Form m_frmTest = null;
public System.Windows.Forms.Form frmTest
{
set
{
//此处可控制!
m_frmTest = value;
}
}
不同的概念,属性描述的是数据读取和写入的规则。如方法二中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的值则是无效的。
一种是把变量的值作为Copy赋给新变量(即ByVal方式),在这种方式下,新变量的值的改变不会影响原变量的值;
另一种是把变量的值作为引用赋给新变量(即ByRef方式),在这种方式下,新变量的值的改变会影响原变量的值。不知道在C#里是怎么实现这两种赋值方式的。
在C#主要是两种类型“值类型”和“引用类型”
引MSDN:如果数据类型在它自己的内存分配中存储数据,则该数据类型就是“值类型”。“引用类型”包含指向存储数据的其他内存位置的指针。你的例子中Form类型是class属于“引用类型”
f = new Form();
f1 = f;
f2 = f1;
并不会出现新的窗体,只是引用。这些东西好好看看MSDN就知道了。
http://hi.baidu.com/mvnvm001/blog/item/df579d2c6ae469e88a1399a1.html
是不是在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;
并不会出现新的窗体,只是引用。
那要什么样的代码才会出现新的窗体?
public void test(int sValue) // 相当于ByValpublic void test(ref int sValue) // 相当于ByRefpublic void test(out int sValue) // 纯输出
把什么是参数、什么是字段、什么是属性搞清楚先蹭点分我容易吗?