C# 按引用传递引用类型
我知道当我们将引用类型按值传递给一个方法时,传递一个引用的副本,如果在引用类型内更改一个值,这也会更改方法外的值,所以当我们在C#中按引用传递引用类型时?因为它看起来是一样的。这应该很清楚,因为C# 按引用传递引用类型,c#,C#,我知道当我们将引用类型按值传递给一个方法时,传递一个引用的副本,如果在引用类型内更改一个值,这也会更改方法外的值,所以当我们在C#中按引用传递引用类型时?因为它看起来是一样的。这应该很清楚,因为字符串是引用类型 公共类程序 { 公共静态void Main() { 字符串s1=“旧值a”; 字符串s2=“旧值b”; 方法1(参考文献s1、s2); Console.WriteLine(s1);//字符串以外的其他场景 public class Person { public string N
字符串
是引用类型
公共类程序
{
公共静态void Main()
{
字符串s1=“旧值a”;
字符串s2=“旧值b”;
方法1(参考文献s1、s2);
Console.WriteLine(s1);//字符串以外的其他场景
public class Person
{
public string Name
{
get;
set;
}
}
假设我们有一个创建人的方法
第1版
public static void CreatePerson(Person p, string name)
{
p = new Person(){ Name = name};
}
版本2
public static void CreatePersonV2(ref Person p, string name)
{
p = new Person(){ Name = name };
}
抛出对象引用异常,因为john仍然引用null
但这将起作用,因为我们通过引用传递了david
当您通过值将变量传递给方法时,实际上是将该变量值的副本传递给方法。由于引用类型的值是该类型所引用的引用,因此当您通过值将引用类型变量传递给方法时,您是错误的将此引用复制到该方法,因此,如果在该方法内更改变量的值,也将更改该方法外的值
当您将新实例分配给引用类型的变量时,实际上您是说该变量引用了新引用,因为您只传递了一个值的副本而不是引用类型的引用,所以您不能将新实例分配给方法中的变量,但是通过ref
传递引用类型,您是p分配引用类型的引用,因此您可以将新实例分配给方法中的变量。什么是“当我们通过值传递引用类型时”?区别在于,如果您通过ref传递引用类型
,那么您可以从传递到的方法中分配新实例,该方法的itlink不起作用@JoeSewell@zahrabayat这对我很有用。网站通常也会出现:
Person john = null;
CreatePerson(john, "John");
Console.WriteLine(john.Name);
Person david = null;
CreatePersonV2(ref david, "David");
Console.WriteLine(david.Name);