c#函数传参数

《c#高级编程》买到手里1年半了,本来花高价钱买的东西该好好看,只是经典的往往是晦涩 难以理解的。里边所讲的事件、代理、范型、字典到现在都没有全搞清楚。现mark如下:
1、一个概念的理解、疑问的澄清需要听各个角度的较全的分析,(经典确实经典,字字珠玑,自己不够聪明)。杂牌书的只言片语说不准也能醍醐灌顶。
2、晦涩的问题今天瞒混过关,明天可能再来,所以。。。
今天搞的几个问题:
一、把ASP.NET项目从VS2003转移到VS2005步骤
1.安装vs2005软件

2.直接打开 vs2003 的项目,按提示自动转化为新的项目。发现目录结构变化很大,找到相关资料,发现vs2005项目有Web Application Projects 和 Web Site Projects 两种。刚才是按照 Web Site Projects 转化的。

3.由于转化为 Web Site Projects 后改动很大,查看相关资料了解到大型的web项目用 Web Application Projects 更好

4.从微软网站下载了Visual Studio 2005 Web Application Projects,并完成安装。

5.把asp.net项目恢复到 vs2003 的版本,按照Migrating a Visual Studio .NET 2003 Web Project to a Web Application Project 说明文档操作

6.我只用了下面方法即完成了 vs2003 到 vs2005 Web Application Projects 的转化:
Start Visual Studio 2005. On the File menu, click Open File, and then browse to the .sln file for the solution you want to migrate. Click Next to proceed through the wizard, accepting all defaults. Visual Studio 2005 will convert the solution and its contained project files to use the MSBuild format, which is the new project file format in Visual Studio 2005.
二、

ref和out的区别


关键字out和ref的不同之处在于哪个方法负责初始化参数.

1> 如果一个方法的参数被标识为out,那么调用代码在调用该方法之前可以不初始化该参数,并且被调用方法不能直接读取参数的值,并且它必须在方法返回之前为该参数赋值.

2>如果一个方法的参数被标识为ref,那么调用代码在调用该方法之前必须初始化该参数.

params 关键字可以指定在参数数目可变处采用参数的方法参数。

在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。

示例
// cs_params.cs
using System;
public class MyClass
{

public static void UseParams(params int[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
Console.WriteLine(list[i]);
Console.WriteLine();
}

public static void UseParams2(params object[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
Console.WriteLine(list[i]);
Console.WriteLine();
}

public static void Main()
{
UseParams(1, 2, 3);
UseParams2(1, 'a', "test");

int[] myarray = new int[3] {10,11,12};
UseParams(myarray);
}
}
输出
1
2
3

1
a
test

10
11
12

===============================================
方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。
若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。
不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。
属性不是变量,不能作为 out 参数传递。
如果两个方法的声明仅在 out 的使用方面不同,则会发生重载。不过,无法定义仅在 ref 和 out 方面不同的重载。例如,以下重载声明是有效的:
class MyClass
{
public void MyMethod(int i) {i = 10;}
public void MyMethod(out int i) {i = 10;}
}
而以下重载声明是无效的:
class MyClass
{
public void MyMethod(out int i) {i = 10;}
public void MyMethod(ref int i) {i = 10;}
}
有关传递数组的信息,请参见使用 ref 和 out 传递数组。
示例
// cs_out.cs
using System;
public class MyClass
{
public static int TestOut(out char i)
{
i = 'b';
return -1;
}

public static void Main()
{
char i; // variable need not be initialized
Console.WriteLine(TestOut(out i));
Console.WriteLine(i);
}
}
输出
-1
b

========================================
方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。
传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。
属性不是变量,不能作为 ref 参数传递。
如果两种方法的声明仅在它们对 ref 的使用方面不同,则将出现重载。但是,无法定义仅在 ref 和 out 方面不同的重载。例如,以下重载声明是有效的:
class MyClass
{
public void MyMethod(int i) {i = 10;}
public void MyMethod(ref int i) {i = 10;}
}
但以下重载声明是无效的:
class MyClass
{
public void MyMethod(out int i) {i = 10;}
public void MyMethod(ref int i) {i = 10;}
}
有关传递数组的信息,请参见使用 ref 和 out 传递数组。
示例
// cs_ref.cs
using System;
public class MyClass
{
public static void TestRef(ref char i)
{
// The value of i will be changed in the calling method
i = 'b';
}

public static void TestNoRef(char i)
{
// The value of i will be unchanged in the calling method
i = 'c';
}

// This method passes a variable as a ref parameter; the value of the
// variable is changed after control passes back to this method.
// The same variable is passed as a value parameter; the value of the
// variable is unchanged after control is passed back to this method.
public static void Main()
{

char i = 'a'; // variable must be initialized
TestRef(ref i); // the arg must be passed as ref
Console.WriteLine(i);
TestNoRef(i);
Console.WriteLine(i);
}
}
输出
b
b
参考资料:MSDN 
 

posted @ 2008-04-19 23:37  那只狐狸  阅读(454)  评论(0编辑  收藏  举报