我觉得不得不写一篇关于方法的输入参数的文章总结:
方法的输入参数是可以通过值传递和引用传递的。通过引用传递给方法的变量是可以在方法体内进行变量值的改变,而通过值传递给方法的变量是不会改变的。这是因为通过引用传递变量时,方法引用的是原来的变量。而值传递变量时,方法引用 的是变量值的副本。
在C#当中所以的方法的输入参数都是值传递,除非特别说明。
但是参数的数据类型确定了这些参数的行为。引用类型只包含这个对象的引用 ,因此他们只给这个方法传递这个引用 ,值类型是包含的实际数据,因此传递给方法的是数据本身的副本。
但是字符串是例外的,你不可能通过引用类型而改变字符串变量的值,如果你改变字符串的值,则会重新创建一个新的字符串对象。这一点很重要
C#当中的变量必须进行了初始化后才用,如果某个变量通过引用传递变量给方法参数,那么你在方法体外所做的对这个变量的初始化将毫无意义,因此我们可以通过out关键字来进行改变这种状态
out关键字使在传递变量时不必对方法体外的变量进行初始化就可使用,而且out关键字是通过引用传递参数,所以方法体内对该变量的任何改变都会被保留下来。
当然跟ref一样,在调用该方法时也需要加上out关键字来区别
当然还有一点要注意:如果你在方法体内还没有对此参数进行初始值,那么在编译时将出错。