将ref关键字与引用类型参数一起使用有什么好处?

时间:2015-11-09 20:29:20

标签: c# reference ref

作为开发人员,通过使用ref关键字将引用类型参数传递给方法,如果不更改引用指向的内容,我可以获得什么?

我已阅读ref keyword with reference type parameterWhat is the use of "ref" for reference-type variables in C#?以及其他一些内容。我知道这个主题已经被问过很多次了。我相信我在问一个独特的问题。如果你认识其他的wize,请随时记下我的问题。

简单的课程:

public class Person
{
    public Person(string first, string last)
    {
        FirstName = first;
        LastName = last;
    }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public override string ToString()
    {
        return string.Format("{0} {1}", FirstName, LastName);
    }
}

使用关键字'ref'传递表单:

public partial class Form2 : Form
{
    private Person _person;

    public Form2()
    {
        _person = new Person("John", "Doe");
        InitializeComponent();
    }

    protected override void OnLoad(EventArgs e)
    {
        textBox1.Text = _person.ToString();

        base.OnLoad(e);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ChangeLastName(ref _person);

        textBox2.Text = _person.ToString();
    }

    private static void ChangeLastName(ref Person person)
    {
        person.LastName = "Smith";
    }
}

表单传递参数而不使用关键字'ref':

public partial class Form2 : Form
{
    private Person _person;

    public Form2()
    {
        _person = new Person("John", "Doe");
        InitializeComponent();
    }

    protected override void OnLoad(EventArgs e)
    {
        textBox1.Text = _person.ToString();

        base.OnLoad(e);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ChangeLastName(_person);

        textBox2.Text = _person.ToString();
    }

    private static void ChangeLastName(Person person)
    {
        person.LastName = "Smith";
    }
}

如果我从前者中获得任何或者作为开发人员的东西有什么区别(除了在我的方法中新建传递参数的能力之外)?

提前致谢,

1 个答案:

答案 0 :(得分:7)

  

作为开发人员,如果不更改引用所指向的方法,可以通过将引用类型参数传递给使用ref关键字的方法来获得什么?

无论如何 - 通过引用传递引用类型的唯一目的是,如果您要更改引用所引用的内容。

公平地说 - 它让你能够改变将来的行为,这将是虐待狂和残忍......