现在要提供一些接口, Uint16 t = 0;
Out(t);我想将基本类型,如 bool , char, byte, sbyte, int16, 32,64..等基本的值类型全都都要按照引用传递,就像C++中函数
声明void Out(int16 &p); 调用的时候用 Out(t)就ok了。。C#里面我知道可以用ref关键字,声明的时候加上 ref 如
void Out( ref int t);
但是他有个缺陷,就是在调用的是时候也要显示的加上ref关键字, 这点很不好,我给别人提供接口,别人用起来很不方法,还是随时判断类型加上ref关键字,有没有更好的办法?谢谢!
Out(t);我想将基本类型,如 bool , char, byte, sbyte, int16, 32,64..等基本的值类型全都都要按照引用传递,就像C++中函数
声明void Out(int16 &p); 调用的时候用 Out(t)就ok了。。C#里面我知道可以用ref关键字,声明的时候加上 ref 如
void Out( ref int t);
但是他有个缺陷,就是在调用的是时候也要显示的加上ref关键字, 这点很不好,我给别人提供接口,别人用起来很不方法,还是随时判断类型加上ref关键字,有没有更好的办法?谢谢!
使用泛型接口方法
voud test<T>(ref T t){}
否则,只能 ref。
这样为了让防止随便 引用变量, 变量的内容不知觉的被函数变掉,导致开发不易。class A{
public int Value;
}
void Ac(A a){
a.Value = 2;
}A f = new A();
f.Value = 1;
Ac(f) ;
这是个优点,而不是缺点。
它明确的告诉程序员该调用按引用传递,参数的内容有可能被改变。C++的语法反而带有歧义,不利于静态分析,比如:
Out(p);
该调用有没有被改变p的副作用?答案是不清楚,还得回头看函数的原形是Out(int)还是Out(int&)。
Out(out var);var 是输出变量,要被改变!