1.类型转换:
public struct myStruct
{
int _myNo;
public myStruct(int myNum)
{
_myNo = myNum;
//
}
//定义显示的myStruct转换,针对整数
static public explicit operator myStruct(int myNum)
{
return new myStruct(myNum);
}
public override string ToString()
{
return _myNo.ToString();
}
}
public class myClass
{
private int _myNo;
//定义隐式的将myClass转换成string
static public implicit operator string(myClass mC)
{
return mC.ToString();
}
public myClass(int myNum)
{
_myNo = myNum;
}
public override string ToString()
{
return _myNo.ToString();
}
}
static void Main(string[] args)
{
myStruct mS;
int i = 100;
mS = (myStruct)i;
Console.WriteLine("整型显式转换成myStruct类型---");
Console.WriteLine(mS.ToString());
myClass mC = new myClass(18000);
string str = mC;
Console.WriteLine("myClass隐式转换成string---");
Console.WriteLine(str);
Console.WriteLine(ReferenceEquals(mS,mS));
Console.WriteLine(ReferenceEquals(mC,mC));
}
2.值传递和引用传递
1. 参数传递默认是按参数的值传递的,即的是参数的值,如果参数是值类型的,则传递的是变量的值,如果参数是引用类型的,则传递的是变量还是变量的值,只不过这个值指向的是堆栈中的某个对象.
1. Static void Main()
2. {
3. Int i=1;
4. showInfo(i);
5. Object o = new Object();
6. showInfo(o);
7. }
8.
9. Static void showInfo(int i)
10. {
11. Console.WriteLine(i.ToString());
12. }
13.
14. Static void showInfo(object o)
15. {
16. Console.WriteLine(o.ToString());
17. }
2. 按引用传递,.net中指的是参数带ref或out方式的.这种方式传递的是参数的地址,实际上是实参和形参是同一块堆栈内存块,所以这种方式无论参数是值类型还是引用类型,形参的改变都将影响实参.
3. String 类型有点特殊,主要在于对String对象做改变时都将新创建对象,所以string类型做参数时的效果和值类型相似.
4. Ref和out传递参数的异同(1)相同点:他们都是按引用传递参数,传递的是实例的地址(2)区别在于用ref来传参数必须对参数先初始化,而out则不必要.