C#中,delegate有默认的一个参数的Constructor,参数的类型为delegate指向的类型。如:
private delegate string someString();
private void button3_Click(object sender, System.EventArgs e)
{
int x=10;
someString st=new someString(x.ToString);
Console.WriteLine(st());}
会输出10;
如果将参数显式声明:
private delegate string someString(string ss);
private void button3_Click(object sender, System.EventArgs e)
{
int x=10;
someString st=new someString(x.ToString);
Console.WriteLine(st(x.ToString()));}
或者
private delegate string someString(string ss);
private void button3_Click(object sender, System.EventArgs e)
{
int x=10;
someString st=new someString(x.ToString);
Console.WriteLine(st(10));}原理应该没有发生变化,但是
结果为110,x的值改为100,那么得到1100,即为x*10+x,很奇怪吧?为什么呢?
private delegate string someString();
private void button3_Click(object sender, System.EventArgs e)
{
int x=10;
someString st=new someString(x.ToString);
Console.WriteLine(st());}
会输出10;
如果将参数显式声明:
private delegate string someString(string ss);
private void button3_Click(object sender, System.EventArgs e)
{
int x=10;
someString st=new someString(x.ToString);
Console.WriteLine(st(x.ToString()));}
或者
private delegate string someString(string ss);
private void button3_Click(object sender, System.EventArgs e)
{
int x=10;
someString st=new someString(x.ToString);
Console.WriteLine(st(10));}原理应该没有发生变化,但是
结果为110,x的值改为100,那么得到1100,即为x*10+x,很奇怪吧?为什么呢?
解决方案 »
- LOG4NET问题
- 代替复制的问题?急!!!!
- 数据库连接资源释放问题?性能优化请教。
- 麻烦懂C#的朋友帮我看看这段代码,为什么我没有办法运行?
- WinCE上通过ActiveSync发送数据的问题!
- winform中treeview控件进行dragdrop操作,将一个树节点拖动到另一树节点前面,并改变节点在数据库中的位置,这段代码怎么写?
- 如何使用动态treeview啊?
- C#中如何创建SQLSERVER数据库建表
- 项目失败,我失业,总结下这段时间的学习(软件工程)
- 请问如何将ArrayList类型序列化成String?或是其他方法实现?
- 到底怎么改这错啊,我是想在listBox里显示Thread运行的结果
- oledb异常如何解决?
你应该查一下
int 类的ToString是怎么写的
someString st=new someString(x.ToString);
Console.WriteLine(st(x.ToString()));
其实相当于调用了Console.WriteLine(x.ToString(x.ToString()))
也就是
10.ToString("10");
你试试结果是几
x.ToString("10");输出什么,这里"10"是一个格式字符串,要看.net如何定义了
1000,output:1010
0000,output:0010
0只是占位,而不输出,因此format为10,0被x的值10占位,输出为110
st是个代理,就等价于x.ToString这个方法,于是st(x.ToString)就是x.ToString(x.ToString());
而后来的10.ToString(10),由于Int32的ToString方法没有使用整数参数的,所以后面的10也被转换成了字符串,效果也是:10.ToString("10");10.ToString("10");
调用的是指定格式的字符串转换方法,“10”当成格式控制符来看,第一个“1”由于C#不认识这么个格式控制符,就原样输出,第二个“0”表示输出一个数字,于是“10”被输出。