Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Melepasi Hartanah melalui Rujukan dalam C#?

Bagaimanakah Saya Boleh Melepasi Hartanah melalui Rujukan dalam C#?

Susan Sarandon
Susan Sarandonasal
2025-01-11 06:34:421004semak imbas

How Can I Pass Properties by Reference in C#?

Melalui sifat dengan rujukan dalam C#

Dalam C#, menghantar sifat melalui rujukan bermakna mengubah suai nilai harta itu dalam satu kaedah dan mencerminkan perubahan tersebut dalam kaedah lain. Walau bagaimanapun, sifat tidak diluluskan secara rujukan secara lalai. Terdapat pelbagai cara untuk mencapai tingkah laku ini.

Nilai pulangan

Salah satu cara ialah mengembalikan nilai daripada kaedah getter dan mengemas kini sifat dalam kaedah panggilan.

<code class="language-csharp">public string GetString(string input, string output)
{
    if (!string.IsNullOrEmpty(input))
    {
        return input;
    }
    return output;
}

public void Main()
{
    Person person = new Person();
    person.Name = GetString("test", person.Name);
    Debug.Assert(person.Name == "test");
}</code>

Delegasi

Pendekatan lain ialah menggunakan perwakilan yang mengambil tindakan yang menetapkan harta itu.

<code class="language-csharp">public void GetString(string input, Action<string> setOutput)
{
    if (!string.IsNullOrEmpty(input))
    {
        setOutput(input);
    }
}

public void Main()
{
    Person person = new Person();
    GetString("test", value => person.Name = value);
    Debug.Assert(person.Name == "test");
}</code>

Ekspresi LINQ

Properti juga boleh dikemas kini melalui refleksi menggunakan ungkapan LINQ.

<code class="language-csharp">public void GetString<T>(string input, T target, Expression<Func<T, string>> outExpr)
{
    if (!string.IsNullOrEmpty(input))
    {
        MemberExpression expr = (MemberExpression)outExpr.Body;
        PropertyInfo prop = (PropertyInfo)expr.Member;
        prop.SetValue(target, input, null);
    }
}

public void Main()
{
    Person person = new Person();
    GetString("test", person, x => x.Name);
    Debug.Assert(person.Name == "test");
}</code>

Refleksi

Akhir sekali, anda boleh menggunakan refleksi untuk menetapkan nilai harta secara langsung.

<code class="language-csharp">public void GetString(string input, object target, string propertyName)
{
    if (!string.IsNullOrEmpty(input))
    {
        PropertyInfo prop = target.GetType().GetProperty(propertyName);
        prop.SetValue(target, input);
    }
}

public void Main()
{
    Person person = new Person();
    GetString("test", person, nameof(person.Name));
    Debug.Assert(person.Name == "test");
}</code>

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melepasi Hartanah melalui Rujukan dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn